如何避免比较列表中的重复字符串

时间:2013-07-03 22:34:13

标签: python string list

我有一个大约一百个字符串的列表,每个字符串在2个for循环中相互比较,这是一个非常基本的代码概述:

string_list = ["PII", "AZO", "CVCO", "MOD"]

for x in string_list:
    for y in string_list:
        if x != y:
            print (x, y)

打印哪些:

PII AZO
PII CVCO
PII MOD
AZO PII
AZO CVCO
AZO MOD
CVCO PII
CVCO AZO
CVCO MOD
MOD PII
MOD AZO
MOD CVCO

如你所见,许多字符串被比较两次(PII - AZO和AZO - PII等)

我一直在试图弄清楚如何使用2个计数变量来避免这个问题,但是我在摸不着头脑,必须有一个更简单/ pythonic的方式这样做,所以没有重叠的字符串比较,有没有人知道如何完成这个?

Python 3,谢谢。

编辑:

预期结果:

PII AZO
PII CVCO
PII MOD
AZO CVCO
AZO MOD
CVCO MOD

2 个答案:

答案 0 :(得分:10)

使用itertools.combinations()

>>> string_list = ["PII", "AZO", "CVCO", "MOD"]
>>> from itertools import combinations
>>> for a, b in combinations(string_list, 2):
...     print(a, b)
... 
PII AZO
PII CVCO
PII MOD
AZO CVCO
AZO MOD
CVCO MOD

您的版本生成了permutations

答案 1 :(得分:2)

你可以手动完成的方法是迭代第二个列表,从第一个列表的索引开始:

import itertools

for i, x in enumerate(string_list):
    for y in itertools.islice(string_list, i + 1, None)
        # if you don't have duplicates, this next check isn't necessary
        if x != y:
            print(x, y)

itertools.islice(list, start, stop)list[start:stop]类似,但不会复制。感谢指出这一点的评论者。