比较未标记的列表/矩阵列表的特定元素python 3.4

时间:2015-10-07 13:59:02

标签: python list compare

我已经从一个大型数据文件中创建了一个很长的列表列表,现在看起来像这样:

[[1, -1, 10, 0]]
[[2, 1, 20, 5]]
[[3, 2, 15, 10], [4, 2, 50, 10], [5, 2, 90, 10]]
[[6, 3, 15, 11]]
[[7, 4, 50, 11]]
[[8, 5, 90, 11]]
[[9, 6, 13, 14]]
[[10, 7, 50, 14]]
[[11, 8, 70, 14], [12, 8, 95, 14], [13, 8, 75, 14]].....

使用此代码

import csv
import operator
import itertools

with open('data.txt', 'r') as f:
csv_input = csv.reader(f, delimiter=' ', skipinitialspace=True)
headers = next(csv_input)

for k, g in itertools.groupby(csv_input, key=operator.itemgetter(3)):
    row = []
    for entry in g:
        entry = [float(e) for e in entry]
        row.append(entry)
    print(row)

现在,我想将第一个列表中的第一个值([1,-1,10,0])(即1)与下一个列表第一行中的第二个值(也是1)进行比较然后,我想比较第二个列表第一行的第一个值,即2,与下一个列表的第一行,下一个列表的第二行,然后是第三行。等等...

我知道synax可能很糟糕,但我正在考虑代码的某些内容(从上面的代码继续):

#save list of lists
with open("matrices.csv", "wb") as d:
    writer = csv.writer(d)

def listCompare():
lists = d
    i=1
    if list[i][0] == list[i+1][1]:
        return True
    else list[i][0] != list[i+1][1]:      #***
        return False
    i+1
    continue

有没有人有任何想法我怎么能这样做?从查看与我类似的其他问题,大多数人都有变量分配给每个列表,这是唯一的方法吗?

***此行语法无效

提前感谢您的帮助!!!

1 个答案:

答案 0 :(得分:0)

您收到无效语法错误的原因是因为else语句不具备条件。所以在你的情况下,你现在有:

if list[i][0] == list[i+1][1]:
    return True
else list[i][0] != list[i+1][1]:      #problem line
    return False

这应该是:

if list[i][0] == list[i+1][1]:
    return True
else:      
    return False

或者如果您想检查另一个条件:

if list[i][0] == list[i+1][1]:
    return True
elif (condition goes here):
    do something
else:      
    return False

但是,正如@Alexander Trakhimenok在评论中所说,你甚至不需要这个if-else声明...

return list[i][0] == list[i+1][1]

现在,看看你的代码有几个指针......

你的函数listCompare没有任何参数,那么你想要lists = d(我猜测的只是在这个问题上有误)。您可能希望将d作为参数传递。此外,列表是一个错误的变量名称,我认为它可能只是lists

的错字

此外,我不确定您使用icontinue的原因,因为现在(修复语法之后)您的代码与此相同:

def listCompare(d):
    return d[1][0] == d[2][1]