我有一个这样的元组元组:t = ((4, 3), (2, 9), (7, 2), ...)
,其中每个嵌套元组中的第一个元素(即t[i][0]
)的范围可以是1到11而不重复,但不一定是1之间的每个整数和11将出席。
我想基于r
创建一个列表(或元组)t
,方法如下:
结果列表r
的长度为11。对于j
中的每个索引r
,如果j + 1 === t[i][0]
为i
,则为r[j] = t[i][1]
,否则为r[j] = 0
。
首先将r
初始化为[0] * 11
,然后循环t
以将t[i][1]
分配给r[t[i][0] - 1]
来完成此操作:
t = ((4, 3), (2, 9), (7, 2), (10, 1))
r = [0] * 11
for item in t:
r[item[0] - 1] = item[1]
r = [0, 9, 0, 3, 0, 0, 2, 0, 0, 1, 0]
但是有没有更有效的方式(可能是一种功能性方式)?
答案 0 :(得分:6)
怎么样:
>>> t
((4, 3), (2, 9), (7, 2), (10, 1))
>>> d = dict(t)
>>> [d.get(el, 0) for el in xrange(1, 12)]
[0, 9, 0, 3, 0, 0, 2, 0, 0, 1, 0]
答案 1 :(得分:1)
我会从t
创建一个字典,并使用查找
r
t = ((4, 3), (2, 9), (7, 2))
d_t = dict(t)
r = [0]*11
r = [d_t[i+1] if i + 1 in d_t else r[i] for i, x in enumerate(r)]
print r
[0, 9, 0, 3, 0, 0, 2, 0, 0, 0, 0]
答案 2 :(得分:1)
只需使用映射(按字典)
d = { v[0]:v[1] for i,v in enumerate(t) }
result = [ d[j+1] if j+1 in d else 0 for j in t ]
答案 3 :(得分:1)
您可以使用dict
和列表理解与条件表达式:
>>> dic = dict(t)
>>> [dic[i] if i in dic else 0 for i in range(1, 12)]
[0, 9, 0, 3, 0, 0, 2, 0, 0, 1, 0]