【问题标题】:integer manipulation with python用python进行整数操作
【发布时间】:2015-07-03 16:08:45
【问题描述】:

我有一个看起来像这样的整数

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吗?不是a = 0b1010101010010100
  • 标准是按 4 个字符组分割吗?有更简单的方法可以做到这一点。
  • 如果x 出现多次,您可能希望使用enumerate 而不是.index(x)
  • 另外,不要将你的变量命名为list,因为这是一个内置的类名,当你有一个名为 list 的变量时,你可能会遇到奇怪的行为。

标签: python string integer


【解决方案1】:

如果你想将你的序列分成 4 个一组,你可以这样做:

>>> b='1010101010010100'

>>> [b[i:i+4] for i in range(0, len(b), 4)]
['1010', '1010', '1001', '0100']

如果您需要一个列表列表,或者将项目包装在 list(..) 中:

>>> [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]]

【讨论】:

    【解决方案2】:

    这是我的解决方案:

    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]]
    

    【讨论】:

      【解决方案3】:

      你的代码有很多问题 -

      1. 我认为你想做 - b.index(x)%3 == 0 而不是 b.index(x)!=0%3(这没有多大意义,除非 b.index(x) 为 0,否则总是错误的。

      2. 你的行中有一个冒号 - tmp_list.append(x):,这是一个语法错误(你应该删除它)。

      3. &是python中的按位和运算符,我相信你应该使用and运算符而不是&

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

      一个建议-

      1. 你不应该有if b.index(x)==0:条件,你可以在for循环之外定义temp_list。

      2. 使用if/elif(而不是所有ifs)。

      示例代码-

      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】:
      b = str(a)
      n = 4
      [list([b[i:i+n]) for i in range(0,len(b),n)]
      

      【讨论】:

        【解决方案5】:

        一种有效的解决方案可能是这个,来自itertools receipes

        它返回迭代器,所以应该很快。

        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)
        

        【讨论】:

          【解决方案6】:
          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)
          

          【讨论】:

            【解决方案7】:

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

            num = 1010101010010100
            [str(num)[i:i+4] for i in range(0, len(str(num)), 4)]
            [str(num)[i*4:i*4+4] for i in range(0, len(str(num))//4)]
            

            【讨论】:

              【解决方案8】:

              列表理解是你的朋友(就像其他许多时候一样):

              a = 1010101010010100
              [list(str(a))[i:i+4] for i in range(0,len(str(a)),4)]
              

              【讨论】:

              • 嘿想。我已经完成了相当多的列表操作,但从未见过它与具有 3 个参数的范围一起使用。谢谢!
              猜你喜欢
              • 1970-01-01
              • 2017-12-18
              • 1970-01-01
              • 2012-10-27
              • 2014-07-20
              • 1970-01-01
              • 2013-06-04
              • 2020-11-08
              • 2019-08-28
              相关资源
              最近更新 更多