【问题标题】:Splitting Python List拆分 Python 列表
【发布时间】:2015-06-14 10:54:24
【问题描述】:

我想拆分下面的列表:

my_list = [(55, 22), (66, 33), (77, 44)]

我试过了:

a, b = my_list

这不起作用。

我需要的是:

a = [55,66,77]
b = [22,33,44]

我正在寻找最简单最简单的方法。

【问题讨论】:

  • 在文档中搜索zip
  • @thefourtheye 不知道...

标签: list python-2.7 split


【解决方案1】:
In [18]: L = [(55, 22), (66, 33), (77, 44)]

In [19]: a,b = zip(*L)

In [20]: a
Out[20]: (55, 66, 77)

In [21]: b
Out[21]: (22, 33, 44)

【讨论】:

  • 期望 zip(*L) 的含义
【解决方案2】:

方法一使用zip和map:

a, b = map(list, zip(*my_list)) #this returns 2 lists 

a
[55, 66, 77]    
b
[22, 33, 44]

这里不是只使用zip(*my_list),而是使用mapzip 来获取2 个列表而不是OP 要求的两个元组。

zip(*)的解释:这个函数取两个等长的集合,将它们成对合并在一起。如果我们在 2 个列表上使用它,我们会得到以下结果:

a1 = [1,2,3]
a2 = [4,5,6]
a3 = zip(a1,a2)
[(1, 4), (2, 5), (3, 6)]

现在,如果您需要取消合并它们,您可以再次使用zip(),因为zip 是它自己的逆运算,但您需要使用特殊的* 运算符。 * 运算符用于解包值。

a4,a5 = zip(*a3)
a4
(1, 2, 3) #returns a tuple though
a5
(4, 5, 6) #returns a tuple though

方法二列表理解:

a = [x[0] for x in my_list]
b = [x[1] for x in my_list]    
a
[55, 66, 77]
b
[22, 33, 44]

在这里,我们使用列表推导来生成两个列表。

我建议你使用第一种方法。

【讨论】:

    【解决方案3】:

    您需要执行以下操作-

    a, b = zip(*my_list)
    

    【讨论】:

      【解决方案4】:

      你可以使用 zip 代替,你可以使用 for 循环来遍历列表中的元组

      检查此代码sn-p

      first_element_list =list()
      >>> second_element_list = list()
      >>> for i in my_list:
      ...     first_element_list.append(i[0])
      ...     second_element_list.append(i[1])
      

      first_element_list =list()
      second_element_list = list()
      
      [first_element_list.append(i[0]) for i in my_list]
      [second_element_list.append(i[1]) for i in my_list]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-25
        • 2013-02-25
        • 2020-07-28
        • 1970-01-01
        相关资源
        最近更新 更多