我有一个列表,类似于:
mylist = ["1", "2", "3", "4", "5"]
我想要在每个其他项目中添加一些文本,使其看起来像这样:
mylist = ["1a", "2", "3a", "4", "5a"]
我写了这个代码,它可以正常地应用于每一个项目。但是如何让它只应用于每隔一个项目呢?
mylist2 = ["a" + item for item in mylist]
我有一个列表,类似于:
mylist = ["1", "2", "3", "4", "5"]
我想要在每个其他项目中添加一些文本,使其看起来像这样:
mylist = ["1a", "2", "3a", "4", "5a"]
我写了这个代码,它可以正常地应用于每一个项目。但是如何让它只应用于每隔一个项目呢?
mylist2 = ["a" + item for item in mylist]
有一个方法可以实现这个需求:
mylist = ["1", "2", "3", "4", "5"]
res = [x + ('a' if i%2 == 0 else '') for i, x in enumerate(mylist)]
导致结果如下:
['1a', '2', '3a', '4', '5a']
x + ''
会生成另一个字符串,而不是直接使用 x
。对于小列表可能不太明显。 - Jean-François Fabrex+'' is x
返回 True
。 - Ma0""
添加内容时有一种优化。 - Jean-François Fabre试试这个:
for i in range(0, len(mylist), 2):
mylist[i] = mylist[i] + "a"
编辑1:
for i in range(0, len(mylist), 2):
mylist[i] += "a"
enumerate
和模运算来使用三元表达式测试奇偶数值。mylist = ["1", "2", "3", "4", "5"]
mylist2 = [item if i%2 else "a" + item for i,item in enumerate(mylist)]
结果:
>>> mylist2
['a1', '2', 'a3', '4', 'a5']
要获得1a
等等,只需将"a" + item
替换为item + "a"
mylist2 = [item if not int(item)%2 else "a" + item for item in mylist]
- Tony Pellerin['a','b','c']
。 - Jean-François Fabre一种有点奇怪的解决方案,它利用了迭代器:
>>> from itertools import cycle
>>> mylist = ["1", "2", "3", "4", "5"]
>>> suffix = cycle(["a", ""])
>>> [l + s for l, s in zip(mylist, suffix)]
['1a', '2', '3a', '4', '5a']
编辑
正如Netwave在评论中建议的那样,这里提供了非常Pythonic的解决方案!
>>> import itertools, operator
>>> list(map(operator.add, mylist, itertools.cycle(("a", ""))))
['1a', '2', '3a', '4', '5a']
map(operator.add, mylist, cycle(("a", "")))
- Netwavemylist = ["1", "2", "3", "4", "5"]
text_list = [str(x) + 'a' if i % 2 == 0 else x for i, x in enumerate(mylist)]
mylist = ["1", "2", "3", "4", "5"]
text_list = [str(x) + 'a' if i % 2 == 0 else x for i, x in enumerate(mylist)]