用python进行整数操作

用python进行整数操作,python,string,integer,Python,String,Integer,我有一个像这样的整数 a = 1010101010010100 list = [[1,0,1,0],[1,0,1,0],[1,0,0,1],[0,1,0,0]] 我想变成这样 a = 1010101010010100 list = [[1,0,1,0],[1,0,1,0],[1,0,0,1],[0,1,0,0]] 我试着做的是 b = str(a) list1 = []; for x in b: if b.index(x)==0: tmp_list = [];

我有一个像这样的整数

a = 1010101010010100
list = [[1,0,1,0],[1,0,1,0],[1,0,0,1],[0,1,0,0]]
我想变成这样

a = 1010101010010100
list = [[1,0,1,0],[1,0,1,0],[1,0,0,1],[0,1,0,0]]
我试着做的是

b = str(a)
list1 = [];
for x in b:
    if b.index(x)==0:
        tmp_list = [];
    if b.index(x)!=0%3:
        tmp_list.append(x):
    if b.index(x)==0%3 & b.index(x)!=0:
        list1.append(tmp_list)
        tmp_list=[];   
我没有得到预期的结果。

以下是我的解决方案:

a = 1010101010010100
k = []
m = [int(i) for i in str(a)]

for j in range(0, len(m), 4):
    k.append(m[j:j+4])
输出:

[[1, 0, 1, 0], [1, 0, 1, 0], [1, 0, 0, 1], [0, 1, 0, 0]]

您的代码中有很多问题-

  • 我想你想做-
    b.index(x)%3==0,而不是
    b.index(x)=0%3
    (这没有多大意义,除非b.index(x)为0,否则始终为false

  • 在-
    tmp\u列表行中有一个冒号。追加(x):
    ,这是一个语法错误(您可能应该删除它)

  • &
    是python中的按位and运算符,我认为应该使用
    运算符,而不是
    &

  • list.index()
    给出元素存在的第一个索引,因为您的字符串只包含1和0,这永远不会超过索引2。相反,您应该考虑使用函数,它将为您提供索引以及元素的值

  • 建议-

  • 如果b.index(x)=0:条件,则不应使用
    ,您可以在for循环之外定义临时列表

  • 使用
    if/elif
    (而不是所有
    if
    s)

  • 示例代码-

    b = str(a)
    list1 = []
    tmp_list = []
    for i,x in enumerate(b):
        if i%4!=0 or i==0:
            tmp_list.append(x)
        else:
            list1.append(tmp_list)
            tmp_list=[]
            tmp_list.append(x)
    
    输出-

    [['1', '0', '1', '0'], ['1', '0', '1', '0'], ['1', '0', '0', '1']]
    
    其中一个应该可以(如果您的数字长度%4!=0,将提供不同的结果):


    如果要将序列分成4组,只需执行以下操作:

    >>> b='1010101010010100'
    
    >>> [b[i:i+4] for i in range(0, len(b), 4)]
    ['1010', '1010', '1001', '0100']
    
    或者,如果您需要确切的列表,请将项目包装在
    列表(…)
    中:

    >>> [list(b[i:i+4]) for i in range(0, len(b), 4)]
    [['1', '0', '1', '0'], ['1', '0', '1', '0'], ['1', '0', '0', '1'], ['0', '1', '0', '0']]
    
    此外,如果子列表中的元素必须是
    int

    >>> [list(int(c) for c in b[i:i+4]) for i in range(0, len(b), 4)]
    [[1, 0, 1, 0], [1, 0, 1, 0], [1, 0, 0, 1], [0, 1, 0, 0]]
    

    列表理解是你的朋友(和其他很多时候一样):


    一种有效的解决方案可能是这样的,从

    它返回迭代器,所以应该非常快

    from itertools import izip_longest
    
    def grouper(iterable, n, fillvalue=None):
        args = [iter(iterable)] * n
        return izip_longest(fillvalue=fillvalue, *args)
    
    numbers = str(1010101010010100)
    nth = 3
    result = grouper(numbers, nth)
    

    你真的是说
    a=1010101010010100
    ?不是
    a=0b1010101010010100
    ?是将其按4个字符组进行拆分的标准吗?有更简单的方法可以做到这一点。似乎你想使用
    枚举
    而不是
    。索引(x)
    如果
    x
    多次出现。另外,不要将变量命名为
    list
    ,因为这是一个内置的类名,当您有一个名为list的变量时,您可能会出现奇怪的行为。Hey thinks.我已经完成了相当多的列表操作,但从未见过将其用于带3个参数的范围。谢谢!谢谢您的建议手势。当我写它的时候,它是相当伪代码。因为我写它是出于记忆。欢迎,一定要记住接受任何对你有帮助的答案,它会帮助社区和任何后来看到这个问题的人。
    from itertools import izip_longest
    
    def grouper(iterable, n, fillvalue=None):
        args = [iter(iterable)] * n
        return izip_longest(fillvalue=fillvalue, *args)
    
    numbers = str(1010101010010100)
    nth = 3
    result = grouper(numbers, nth)
    
    import math
    
    a = 1010101010010100
    res = []
    
    long = math.ceil(math.log10(a))
    digits = [0] * (4 - long % 4) if long % 4 else []
    digits.extend([int(i) for i in str(a)])
    
    for i in xrange(0, len(digits), 4):
        res.append(digits[i:i+4])
    
    print(res)