我有一个总是很长的列表。
mylist = ['a', 'b', 'c', 'd', 'e', 'f']
我可以将其转化为最佳方式:
mylist = ['ab', 'cd', 'ef']
我有这个,它有效,但它看起来非常冗长:
myotherlist = []
for x in xrange(0, len(mylist), 2):
myotherlist.append(mylist[x] + mylist[x + 1])
返回此内容:
>>> myotherlist
['ab', 'cd', 'ef']
答案 0 :(得分:2)
>>> mylist = ['a', 'b', 'c', 'd', 'e', 'f']
>>> mylist[::2]
['a', 'c', 'e']
>>> mylist[1::2]
['b', 'd', 'f']
>>>
>>> myotherlist = [a+b for a, b in zip(mylist[::2],mylist[1::2])] #This line does the work
>>> myotherlist
['ab', 'cd', 'ef']
我已经包含多行来说清楚,但它实际上只有一行来完成操作
答案 1 :(得分:1)
我愿意:
>>> [''.join([x, y]) for x, y in zip(mylist[::2], mylist[1::2])]
['ab', 'cd', 'ef']
答案 2 :(得分:1)
我住的是助手发电机。唯一的问题是显而易见的产生元组,并且需要将它们加在一起再次形成字符串。我仍然更喜欢制作字符串特定的生成器......
def pairs(iterable):
i = iter(iterable)
while True:
yield i.next(), i.next()
myList = [a + b for a, b in pairs(['a', 'b', 'c', 'd', 'e', 'f'])]
myList2 = [a + b for a, b in pairs("abcdef")]
答案 3 :(得分:0)
您可以使用列表推导将其放在一行
myotherlist = [mylist[x] + mylist[x+1] for x in xrange(0, len(mylist), 2)]
但它并没有为你节省太多。