【问题标题】:Zip together each element of one list将一个列表的每个元素压缩在一起
【发布时间】:2016-07-22 08:52:30
【问题描述】:

从字符串列表开始。每个字符串都有相同数量的字符,但这个数字不是预先确定的,不相关的字符串总数也不是。

这是一个例子:

data = ['ABC', 'EFG', 'IJK', 'MNO']

我想要的最终输出是这样的:

[('A', 'E', 'I', 'M'), ('B', 'F', 'J', 'N'), ('C', 'G', 'K', 'O')]

我想要的输出是我在以某种方式使用zip() 后所期望看到的。我的问题是我找不到将一个数组的每个元素压缩在一起的正确方法。

基本上,我试图从一组行中取出列。

到目前为止我所做的尝试:

  1. 将数据拆分成二维列表:

    split_data = [list(row) for row in rows]

这给了我:

[['A', 'B', 'C'], ['E', 'F', 'G'], ['I', 'J', 'K'], ['M', 'N', 'O']]
  1. 尝试在上面使用zip(),例如:

    zip(split_data)

我继续这样结束:

[(['A', 'B', 'C'],), (['E', 'F', 'G'],), (['I', 'J', 'K'],), (['M', 'N', 'O'],)]

显然,它压缩了每个元素,没有任何内容,导致它返回带有空白元组的原始数据。如何让zip() 将data 或split_data 的每个元素视为应压缩的列表?

我需要的是zip(data[0], data[1], data[2], ...)

【问题讨论】:

    标签: python


    【解决方案1】:

    只需解压data:

    >>> data = ['ABC', 'EFG', 'IJK', 'MNO']
    >>> zip(*data)
    [('A', 'E', 'I', 'M'), ('B', 'F', 'J', 'N'), ('C', 'G', 'K', 'O')]
    

    至于解释,我无法比@Martijn 在这里解释得更好更简洁:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多