从元组转换为列表及反向转换

2 投票
4 回答
825 浏览
提问于 2025-04-16 10:37

我该怎么把 [('a', 1), ('c', 3), ('b', 2)] 变成 ['a',1,'c',3,'b',2],反过来也一样?谢谢!

4 个回答

1

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们刚开始学习编程的时候。为了帮助大家更好地理解这些问题,很多人会在网上提问,比如在StackOverflow上。

在这些提问中,通常会有一些代码示例,像

L = [('a', 1), ('c', 3), ('b', 2)]
flat = [x for p in L for x in p]
assert flat == ['a', 1, 'c', 3, 'b', 2]

it = iter(flat)
L2 = zip(it, it)
assert L2 == L

print "Success"
这样的占位符就是用来表示代码的部分。通过这些代码,提问者希望能得到一些解决方案或者建议,以便更好地理解如何解决他们遇到的问题。

总之,编程的学习过程充满了挑战,但通过提问和交流,我们可以更快地找到解决办法,提升自己的技能。

3

这是我对这个问题的看法(假设a是第一个列表,b是第二个列表):

b = []
for i in a:
    b.extend(i)

还有反向的情况:

c = []
for i in range(0, len(b) - 1, 2):
   c.append((b[i], b[i+1]))
10

[('a', 1), ('c', 3), ('b', 2)] 转换到 ['a',1,'c',3,'b',2] 的过程叫做“扁平化列表”。这里我们可以参考一个被接受的答案,并稍作修改来适应这个例子:

>>> L = [('a', 1), ('c', 3), ('b', 2)]
>>> list(itertools.chain(*L))
['a', 1, 'c', 3, 'b', 2]

这个过程使用了 itertools.chain,这是一个来自 itertools 的很不错的工具,可以很好地将多个序列合并成一个。

而反过来的过程叫做“打包”。

>>> L = ['a', 1, 'c', 3, 'b', 2]
>>> zip(L[0::2], L[1::2])
[('a', 1), ('c', 3), ('b', 2)]

zip 函数可以把两个列表结合在一起,它会把列表1的第一个元素和列表2的第一个元素放在一个元组里,然后依次类推,直到列表的末尾。所以在这个例子中,我们基本上是把偶数索引的元素作为第一个列表(L[0::2]),把奇数索引的元素作为第二个列表(L[1::2])。

撰写回答