从元组转换为列表及反向转换
我该怎么把 [('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]
)。