【问题标题】:Merge python list elements in twos [duplicate]两两合并python列表元素[重复]
【发布时间】:2021-06-13 06:10:59
【问题描述】:

我在 python 中有一个列表,我想合并它的每个第二个元素。 所以转这个:

['apple', 'red', 'banana', 'yellow', 'blueberry', 'blue']

进入这个:

['apple red', 'banana yellow', 'blueberry blue']

【问题讨论】:

  • 如何处理奇数个元素?
  • 使用 zip 并加入。

标签: python list merge


【解决方案1】:
list = ['apple', 'red', 'banana', 'yellow', 'blueberry', 'blue']
newList = []
x = 0

for i in range (len(list)):
    x += 1
    if x % 2 == 0:
        newList.append(f"{list[i-1]} {list[i]}")

print(newList)

【讨论】:

  • 我建议不要使用list 作为变量名,因为它是一个内置关键字。除了使用 f-string,您还可以使用更 Python 的 " ".join(list[i-1], list[i])
【解决方案2】:

只需使用简单的列表推导即可。为此,将原始列表分成两个列表 - 一个从第 0 个元素开始并遍历每个第二个元素,第二个列表从第一个元素开始并类似地迭代每个第二个元素:

i = ['apple', 'red', 'banana', 'yellow', 'blueberry', 'blue']
b = [f'{a} {j}' for a, j in zip(i[::2], i[1::2])]

【讨论】:

  • 这将忽略奇数长度列表中的最后一个元素,因为调用的是 zip 而不是 zip_longest。
  • @ApplePie,同意,但问题是成对组合,所以如果没有成对组合,省略它是有意义的。
【解决方案3】:

这是一个简单的解决方案,假设您的数据是一个名为 l 的变量:

from itertools import zip_longest
[' '.join(filter(None, pair)) for pair in zip_longest(l[::2], l[1::2])]

使用zip_longest 可确保奇数个值包含最后一个元素。

编辑:在 None 上添加了一个过滤器,以确保奇数元素没有附加空格。

【讨论】:

    【解决方案4】:

    你也可以这样做:

    l = ['apple', 'red', 'banana', 'yellow', 'blueberry', 'blue']
    l1 = iter(l)
    l2 = iter(l)
    next(l2, None)
    res = []
    for _ in zip(l1, l2):
      next(l1, None)
      res.append(' '.join(_))
      next(l2, None)
      
    print(res)
    

    只是为了使用 iter 和 next 的乐趣 ;-)

    【讨论】:

    • 你应该看看itertools.tee :)
    猜你喜欢
    • 2015-05-25
    • 1970-01-01
    • 2013-08-05
    • 2019-04-28
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    相关资源
    最近更新 更多