我有一个大约一百个字符串的列表,每个字符串在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
答案 0 :(得分:10)
>>> 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]
类似,但不会复制。感谢指出这一点的评论者。