比较for循环中列表中的差异

时间:2018-08-02 15:55:55

标签: python list

我有一个功能,可以捕获一些XML文件的标签结构。因此,使用for循环,最终得到变量lt,它是标签列表的列表。在一个循环中,我将拥有:

lt = [['MLB', 'OF', '25'], ['NBA', 'PG', '26']]

下一个循环类似于:

lt = [['MLB', 'OF', '25'], ['NBA', 'PG', 'Lakers' '26']]

由于for循环,我的变量名保持静态。有什么方法可以比较列表而不是列表,并说列表是否彼此不同?

4 个答案:

答案 0 :(得分:0)

...只是保留它作为参考

last = None
for ...:
    lt = ..
    if last is not None and lt != last:
        print "different line"
    last = lt

答案 1 :(得分:0)

这个问题尚不清楚,但是我想我知道您要尝试做的事情:您想将一个循环步骤中的值与上一个步骤进行比较?如果是这样,请使用某种方式引用循环的键将其值捕获到dict中:

tags_by_file = {}
for file in file_list:
    tags = get_tags(file)
    tags_by_file[file] = tags
    ...

之后,您可以引用任何先前文件的标签。

答案 2 :(得分:0)

要获取列表中相同的元素:

list_1 = [['MLB', 'OF', '25'], ['NBA', 'PG', '26']]
list_2 = [['MLB', 'OF', '25'], ['NBA', 'PG', 'Lakers' '26'], []]

list_3 = []
for element in list_1:
  if (element in list_2):
    list_3.append(element)


print(list_3)

要查看它们是否不同,可以将合并列表的长度与原始列表的长度进行比较。因此,只需添加

len(list_3) == len(list_1) and (len(list_3) == len(list_2)

答案 3 :(得分:0)

您可以照常直接比较列表:

>>> l1 = [['MLB', 'OF', '25'], ['NBA', 'PG', '26']]
>>> l1 == [['MLB', 'OF', '25'], ['NBA', 'PG', '26']]
True
>>> l1 == [['MLB', 'OF', '25'], ['NBA', 'PG', '27']]
False

但是,如果您对“内部”列表集的比较感兴趣并且不依赖于它们的顺序,只需比较排序后的列表即可:

>>> l1 = [['MLB', 'OF', '25'], ['NBA', 'PG', '26']]
>>> l2 = [['NBA', 'PG', '26'], ['MLB', 'OF', '25']]
>>> l1 == l2
False
>>> sorted(l1) == sorted(l2)
True

如果您需要比较来自不同迭代的列表,请将每个新列表附加到循环外部的某个常规列表中,以便先前的列表可以通过相应迭代的索引进行访问。像这样:

results = []

for i, item in enumerate(items):
    # your logic from the loop, that gives us new_list
    results.append(new_list)
    # now we can compare it with one of the previous results
    identity = results[i] == results[i - 1] if i > 0 else False