我在互联网系列管中找到了这个有用的代码:
x=[1,2,3,4]
y=[1,2,3,4]
combos=[(`i`+`n`) for i in x for n in y]
combos
['11','12','13','14','21','22','23','24','31','32','33','34','41','42','43','44']
我正在尝试做的事情如下:
combinations={(i: `n`+`d`) for i in range(16) for n in x for d in y}
combinations
{1: '11', 2: '12', 3: '13', 4: '14', 5: '21', 6: '22'...etc}
但显然这不起作用。可以这样做吗?如果是这样,怎么样?
答案 0 :(得分:6)
combos = [str(i) + str(n) for i in x for n in y] # or `i`+`n`, () for a generator
combinations = dict((i+1,c) for i,c in enumerate(combos))
# Only in Python 2.6 and newer:
combinations = dict(enumerate(combos, 1))
# Only in Python 2.7 and newer:
combinations = {i+1:c for i,c in enumerate(combos)}
答案 1 :(得分:1)
你......可能......不想那样。至少,我看不到需要它的理由。如果你所追求的是能够跟踪他们的位置,你希望结果是一个列表,它已经是。如果你需要知道索引,你应该这样做:
for idx, combo in enumerate(combinations):
print idx+1, combo
如果您确实需要按位置(以及列表索引+ 1)访问它们,您可以执行以下操作:
lookup = dict((idx+1, combo) for idx, combo in enumerate(combinations))
答案 2 :(得分:0)
从第一个例子开始:
x=[1,2,3,4]
y=[1,2,3,4]
combos=[(`i`+`n`) for i in x for n in y]
然后添加:
combinations = {i: c for i, c in enumerate(combos)}
答案 3 :(得分:0)
此外,itertools
模块中有一个product
函数可以在这里使用
from itertools import product
x=[1,2,3,4]
y=[1,2,3,4]
combs = {i+1: ''.join(map(str,p)) for i,p in enumerate(product(x,y))}
''.join(map(str,p))
是将p
(tuple
int-s
)的所有项目转换为str
然后使用{''.join(...)
加入它们的代码1}}。如果您不需要,请离开p
而不是此代码。
另请注意,语法{j for j in js}
仅适用于Python 2.7