python是几比特?

Python012

python是几比特?,第1张

以python3版本为例说明, int 类型在python中是动态长度的。因为python3中int类型是长整型,理论支持大的数字,但它的结构其实也很简单, 在 longintepr.h 中定义:

struct _longobject {

PyObject_VAR_HEAD

digit ob_digit[1]

}

这结构是什么意思呢,重点在于 ob_digit 它是一个数组指针。digit 可认为是 int的别名。python的整型存储机制是这样的。比方要表示一个很大的数:123456789 。而每个元素只能表示3位十进制数(为理解打的比方)。那么python就会这样存储:

ob_digit[0] = 789

ob_digit[1] = 456

ob_digit[2] = 123

低位存于低索引下。python中整型结构中的数组,每个元素存储 15 位的二进制数(不同位数操作系统有差异32位系统存15位,64位系统是30位)。

因此,sys.getsizeof(0) 数组元素为0。此时占用24字节(PyObject_VAR_HEAD 的大小)。 sys.getsizeof(456) 需使用一个元素,因此多了4个字节。

你的例子第一列全是 3,我给个例子吧:[321, 32, 3, 4],输出该是 321,32,3,4。

第一个数越大,则应该排在后面,毕竟 4XXX 是比 3XXX 大的。

setp 1: [0][1][2]

         3  2  1

         3  2

         3

         4

排序第 0 列,越大的排越后。

ret = [?, ?, ?, 4]

setp 2: [0][1][2]

         3  2  1

         3  2

         3 <3>     <- 补位 3,因为 3 是同 3 组第一个元素。

排序第 1 列,越大的排越后。

ret = [?, ?, 3, 4]

setp 3: [0][1][2]

         3  2  1

         3  2 <3>  <- 补位 3,因为 3 是同 3 组第一个元素。

排序第 2 列,越大的排越后。323 比 321 大,所以……

ret = [?, 32, 3, 4]

只剩一个,那个排第一:

ret = [321, 32, 3, 4]

以上就是基本思路了。综上可得:

1. 先按 [0] 列分组:

2. 组中每个数都补位到同样长度,然后再排序。

完整代码:

def joinmin(ls):

    groups = {}

    for item in ls:

        prefix = item

        n = 0

        while prefix > 10:

            prefix //= 10

            n += 1

        groups.setdefault(prefix, []).append([item, n])

    sorted_keys = list(sorted(groups))

    ret = 0

    for prefix in sorted_keys:

        items = groups[prefix]

        max_n = max([t[1] for t in items])

        presort_items = []

        for item, item_n in items:

            padding = item

            n = item_n

            while max_n > n:

                padding *= 10

                padding += prefix

                n += 1

            presort_items.append((padding, item, item_n))

        for _, item, n in sorted(presort_items):

            while n > -1:

                ret *= 10

                n -= 1

            ret += item

    return ret

不是看在你的分上答的,不过这种小题目蛮有趣的。

以下是一个使用 C 语言求解的方法,望采纳:

#include <stdio.h>

int main() {

int a[10] = {3, 4, 2, 5, 7, 9, 1, 8, 6, 0}

int max_value = a[0]

int max_index = 0

for (int i = 1i <10i++) {

if (a[i] >max_value) {

max_value = a[i]

max_index = i

}

}

printf("The maximum value is %d, and it is at index %d.\n", max_value, max_index)

return 0

}

输出:

The maximum value is 9, and it is at index 5.

这段代码会初始化一个长度为 10 的整型数组 a,然后遍历数组中的所有元素,找到最大值并记录下标。