我正在为我的大学的某个班级做一个小项目。在我的一个函数中,我有一个列表,如:
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更好。 (当我说得更好,我的意思更快) 如果没有更好的方法,我想知道是否有更简洁的方法来编写这段代码。也许使用列表理解。
答案 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'): ''}