我对python很陌生,一直在尝试编写一个小代码,但还没有成功,所以我决定在这里发表文章。
我有一个python列表,如下所示:
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
我想在这个列表中插入一个分隔符“x”问题是输出应该如下所示:
['a', 'x', 'b', 'xx', 'c', 'xxx', 'd', 'xxxx']
这里是一个x的代码:
zz = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
print(zz)
print('letters with delimiters as x')
i = 1
while i < len(zz):
zz.insert(i, 'x')
i += 2
print(zz)
最佳答案
我的第一个想法是使用所有的火箭筒:
使用zip
交叉排列您的列表和另一个由x,xx,xxx使用字符串乘法完成(使用生成器理解避免创建“硬”列表,无需)
使用itertools.chain
将获得的元组展平
像这样(第一次尝试,有效,但还有改进的余地):
>>> lst = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
>>> list(itertools.chain.from_iterable(zip(lst,("x"*(i+1) for i in range(len(lst))))))
使用
enumerate
和不使用zip
的变体,稍好一点(range(len(lst))
通常是一个大的无BTW):>>> list(itertools.chain.from_iterable((v,"x"*i) for i,v in enumerate(lst,1)))
避免
chain
,使用listcomp压平元组(可能是最明智的选择,使用的字母比符号多,这是肯定的):>>> [item for elts in ((v,"x"*i) for i,v in enumerate(lst,1)) for item in elts]
全部3个打印:
['a',
'x',
'b',
'xx',
'c',
'xxx',
'd',
'xxxx',
'e',
'xxxxx',
'f',
'xxxxxx',
'g',
'xxxxxxx',
'h',
'xxxxxxxx']