我有一个字符串示例列表:
my_list = ['hello','this','is','a','sample','list', 'thanks', 'for', 'help']
我想将每三个元素结合在一起,例如:
new_list = ['hello this is', 'a sample list', 'thanks for help']
答案 0 :(得分:4)
只需分成几块并加入:
[' '.join(my_list[i:i+3]) for i in range(0, len(my_list), 3)]
答案 1 :(得分:0)
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?
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)]
使用tee
和zip_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='')]
最后两个改编自文档中的pairwise
和grouper
recipes。如果不是三个字的倍数,则只有第一个选项不会在最后一组末尾添加额外的空格。