将一个元组中的元组转换成列表

4
我有一个元组,如下所示:t = ((4, 3), (2, 9), (7, 2), ...),其中每个嵌套元组的第一个元素(即t[i][0])可以在1到11之间且不重复,但并不一定包含1到11之间的每个整数。
我想按照以下方式基于t创建一个列表(或元组)r
生成的列表r具有长度为11。对于r中的每个索引j,如果存在任何i使得j + 1 === t[i][0],则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]

但是有没有更有效率的方式(也许是一种功能性的方式)呢?

1
这可以通过首先将r初始化为[0] * 11,然后循环遍历t来将t[i][1]分配给r[t[i][0]]来完成。您有相关代码吗?请展示一下您尝试过的内容。 - TerryA
2
你能给出你的示例t的预期r值吗? - arshajii
@Haidro,已添加上述代码。 - skyork
@arshajii,我已经添加了一个例子。 - skyork
4个回答

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
我会从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]

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 ]

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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接