如何检查一个列表中的列是否具有不同的数字?

4

我正在尝试识别所有包含不同数字的列。

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"
任何帮助将不胜感激。
3个回答

3

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

1
您交换了索引。因此,j0,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)

0

你可以使用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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接