如何合并列表的某些部分:Python

时间:2018-08-17 05:59:59

标签: python python-3.x list string-concatenation

我有一个字符串示例列表:

my_list = ['hello','this','is','a','sample','list', 'thanks', 'for', 'help']

我想将每三个元素结合在一起,例如:

new_list = ['hello this is', 'a sample list', 'thanks for help']

4 个答案:

答案 0 :(得分:4)

只需分成几块并加入:

[' '.join(my_list[i:i+3]) for i in range(0, len(my_list), 3)]

答案 1 :(得分:0)

选项1:如果my_list的长度不能被3整除,则此解决方案会删除元素

输入字符串:['hello','this','is','a','sample','list', 'thanks', 'for', 'help', 'foo']

[" ".join(i) for i in zip(*[iter(my_list)]*3)]

结果:['hello this is', 'a sample list', 'thanks for help']

python iter技巧如何工作:How does zip(*[iter(s)]*n) work in Python?

选项2:用zip_longest保留额外的元素

输入字符串:['hello','this','is','a','sample','list', 'thanks', 'for', 'help', 'foo']

[" ".join(i) for i in zip_longest(*[iter(my_list)]*3, fillvalue='')]

结果:['hello this is', 'a sample list', 'thanks for help', 'foo ']

答案 2 :(得分:0)

您可以通过使用一个步骤(在本例中为3个步骤)进行迭代并在每个步骤(即my_list[i]my_list[i+1])下添加各个字符串来解决此问题。 my_list[i+2 ]。请注意,您需要在每个第一个和第二个字符串之后添加一个空格。这段代码可以做到:

new_list = []
for i in range(0, len(my_list), 3):
    if i + 2 < len(my_list):
        new_list.append(my_list[i] + ' ' + my_list[i+1] + ' ' + my_list[i+2])
print(new_list)

输出符合预期:

['hello this is', 'a sample list', 'thanks for help']

答案 3 :(得分:0)

使用itertools可以有两种解决方案。

使用groupby

[' '.join(x[1] for x in g) for _, g in groupby(enumerate(my_list), lambda x: x[0] // 3)]

使用teezip_longest

a, b = tee(my_list)
next(b)
b, c = tee(b)
next(c)
[' '.join(items) for items in zip_longest(a, b, c, fillvalue='')]

仅使用zip_longest

[' '.join(g) for g in zip_longest(*[iter(my_list)] * 3, fillvalue='')]

最后两个改编自文档中的pairwisegrouper recipes。如果不是三个字的倍数,则只有第一个选项不会在最后一组末尾添加额外的空格。