从元组的元组中创建一个列表

Posted

技术标签:

【中文标题】从元组的元组中创建一个列表【英文标题】:Create a list out of a tuple of tuples 【发布时间】:2013-09-10 15:22:02 【问题描述】:

我有一个像这样的元组:t = ((4, 3), (2, 9), (7, 2), ...),其中每个嵌套元组中的第一个元素(即t[i][0])可以从 1 到 11 不重复,但不一定是 1 到 11 之间的每个整数现在。

我想基于t创建一个列表(或元组)r,方式如下:

结果列表 r 的长度正好是 11。对于r 中的每个索引j,如果j + 1 === t[i][0] 对应任何i,则为r[j] = t[i][1],否则为r[j] = 0

这可以通过首先将r初始化为[0] * 11,然后循环通过tt[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]

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

【问题讨论】:

"这可以通过先将 r 初始化为 [0] * 11 来完成,然后通过 t 循环将 t[i][1] 分配给 r[t[i][0]]。 "你有这方面的代码吗?请向我们展示您的尝试 您能否为您的示例提供预期的r t @Haidro,添加了上面的代码。 @arshajii,我添加了一个示例。 【参考方案1】:

怎么样:

>>> 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]

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

您可以使用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]

【讨论】:

【参考方案4】:

只需使用映射(按字典)

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 ]

【讨论】:

以上是关于从元组的元组中创建一个列表的主要内容,如果未能解决你的问题,请参考以下文章

从元组列表中获取具有“NaN”的元组索引

从不同长度的元组列表的字典中创建 Pandas DataFrame

从元组python 3列表中只获取整数

Python:元组列表:比较所有元组并检索元组的元素不等于任何其他元组的元组

使用min函数从元组列表中获取多个元组

如何根据元组的索引值从列表中删除重复的元组,同时保持元组的顺序? [复制]