用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。相反,您应该考虑使用函数,它将为您提供索引以及元素的值,您可以在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)