如何将一个元组分成两个独立的列表?

时间:2019-02-22 07:57:55

标签: python split tuples

我想将以下元组分为两个列表

(('happy', 5.001), ('neutral', 10.004), ('neutral', 15.006), ('happy', 20.071), 
 ('fear', 25.071))

我希望我的列表如下所示:

a = ('happy', 'neutral', 'neutral', 'happy', 'fear')
b = (5.001, 10.004, 15.006, 20.071, 25.071)

split()方法对此无效。

4 个答案:

答案 0 :(得分:4)

这是您的新英雄,zip功能!

l = (('happy', 5.001), ('neutral', 10.004), ('neutral', 15.006), ('happy', 20.071), ('fear', 25.071))
a, b = zip(*l)

对于将来的使用,我们可以说它可以在两种不同的模式下工作:

  • zip(*iterable)生成 n 个可迭代对象(即可迭代对象中每个元组的大小 n ),其中每个可迭代对象都包含 ith 每个元组的元素(我的答案的示例)。
  • zip(iterable_1, ..., iterable_n)生成一个单一的可迭代对象,其中每个元素都是一个大小为 n 的元组,其中包含每个可迭代元素的对应索引。

答案 1 :(得分:0)

t = (('happy', 5.001), ('neutral', 10.004), ('neutral', 15.006), ('happy', 20.071), ('fear', 25.071))
a = [x[0] for x in t]
b = [x[1] for x in t]

这使用列表理解来解决该问题。它使用't'中每个元组的第一个元素(索引0)创建列表'a',同时使用第二个元素(索引1)创建列表'b'。

答案 2 :(得分:0)

t = (('happy', 5.001), ('neutral', 10.004), ('neutral', 15.006), ('happy', 20.071), ('fear', 25.071))
a, b = zip(*t)

答案 3 :(得分:0)

要做您想做的事,只需执行以下操作

c = (('happy', 5.001), ('neutral', 10.004), ('neutral', 15.006), ('happy', 20.071), ('fear', 25.071))
a, b = zip(*c)

但是在这种情况下,a和b是元组而不是列表,列表采用以下格式:

a = ['happy', 'neutral', 'neutral', 'happy', 'fear']
b = [5.001, 10.004, 15.006, 20.071, 25.071]

您只需执行list(a)即可将元组转换为list