Python:有没有更好的方法来组合列表

时间:2015-06-04 14:02:22

标签: python list dictionary

我正在为我的大学的某个班级做一个小项目。在我的一个函数中,我有一个列表,如:

x = ["q0", "q1", "q2", "q3", "q4"]

我希望从该列表中创建一个字典,我将用它来存储值,然后获取像我在矩阵中搜索的值,它们组合了列表的值,如下所示:

dic = {("q0", "q1"): "", ("q0", "q2"): "", ... ("q3", "q4"): ""}

我是这样做的:

part1 = x[1:]
part2 = x[:-1]
dic = {}
for v in part1:
    for r in part2:
        if v != r and (r, v) not in dic.keys():
            dic[(v, r)] = ""

我使用了if,因为我不想重复值,例如:

("q1", "q1")

而且我也不想要反对的价值观,比如:

("q2", "q3"), ("q3", "q2")

我的问题是,是否有更好的方法来做到这一点。比使用for for for for更好。 (当我说得更好,我的意思更快) 如果没有更好的方法,我想知道是否有更简洁的方法来编写这段代码。也许使用列表理解。

1 个答案:

答案 0 :(得分:0)

您可以在词典理解中使用itertools.combinations

>>> from itertools import combinations 
>>> x = ["q0", "q1", "q2", "q3", "q4"]
>>> d={i:'' for i in combinations(x,2)}
>>> d
{('q0', 'q3'): '', ('q2', 'q3'): '', ('q0', 'q2'): '', ('q3', 'q4'): '', ('q1', 'q3'): '', ('q0', 'q4'): '', ('q1', 'q4'): '', ('q0', 'q1'): '', ('q1', 'q2'): '', ('q2', 'q4'): ''}