我正在尝试识别所有包含不同数字的列。
for i in range(len(f)):
for j in range(len(f[i])):
if(f[j][i] != f[j][i+1]):
print(f[j][i+1])
例如,如果列表是
f = [[3, 5, 6, 7],[7, 5, 6, 3]]
。我想获取列0和列3,但我得到了:"list index out of range"
。任何帮助将不胜感激。
使用 zip
可以实现更好的解决方案:
for i, (a, b) in enumerate(zip(*f)):
if a != b: print i
zip(*f)
会给你:
In [18]: zip(*f)
Out[18]: [(3, 7), (5, 5), (6, 6), (7, 3)]
现在您可以轻松比较“列”。
如果您是一行代码的人:
[i for i, (a, b) in enumerate(zip(*f)) if a != b]
j
是0,1,2,3
,当它达到2时,在您的if子句中发生错误。请记住,第一个索引为子列表的索引,第二个索引为子列表中项目的索引。
这将正确返回0和3:
for i in range(len(f)-1):
for j in range(len(f[i])):
if(f[i][j] != f[i+1][j]):
print(j)
你可以使用zip
:
f = [[3, 5, 6, 7], [7, 5, 6, 3]]
for n, (i, j) in enumerate(zip(*f)):
if i != j:
print(n)
zip(*f)
表达式会迭代一个“转置”的版本,针对你的列表 f
。