Python:加入列表的相邻成员?

时间:2014-04-11 12:21:35

标签: python list

我有一个总是很长的列表。

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']

4 个答案:

答案 0 :(得分:2)

您可以使用zip()slicing进行非常精彩的理解:

>>> 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)]

但它并没有为你节省太多。