交换列表列表中的元素

时间:2017-10-25 16:37:14

标签: python

我有以下列表清单 -

[['s1','s2','s3','s4'],
 ['s5','s6','s7','s8'],
 ['s9','s10','s11','s12']]

我想将列表设为 -

[['s1s3','s2s4'],
 ['s5s7','s6s8'],
 ['s9s11','s10s12']]

列表中的列表可以包含4个以上的元素,但它始终包含偶数个元素。有没有使用两个for循环的一般方法?我现在正在使用嵌套循环来做这个,我想避免嵌套循环。

3 个答案:

答案 0 :(得分:2)

<强>更新

在看到评论后,OP通过以下方式提出了所需的结果:

['s1','s2','s3','s4','s5','s6']

感:

 ['s1s4','s2s5','s3s6']

下面的代码已相应修改(并且应该在Python 2和3中都有效)。

这是一种通用的方法,但它仍然有效地使用嵌套循环,因为pairwise()辅助函数中有一个:

from itertools import islice

data = [['s1','s2','s3','s4','s5','s6'],
        ['s7','s8','s9','s10'],
        ['s11','s12']]

def pairwise(iterable):
    "s -> [s0+s2, s1+s3), s3+s5, ...]"
    a = iter(iterable)
    b = islice(iterable, len(iterable)//2, None)
    return [''.join(pair) for pair in zip(a, b)]

data2 = [pairwise(row) for row in data]
print(data2)  # -> [['s1s4', 's2s5', 's3s6'], ['s7s9', 's8s10'], ['s11s12']]

答案 1 :(得分:0)

列表理解对您有用。检查下面的解决方案。我没有优化它,但它的工作原理

lis = [['s1','s2','s3','s4'],
       ['s5','s6','s7','s8'],
       ['s9','s10','s11','s12']
       ]  
new_list = [["".join([odd_value for count, odd_value in enumerate(each_list) if count % 2 == 0]),"".join([odd_value for count, odd_value in enumerate(each_list) if count % 2 == 1])] for each_list in lis ]

print(new_list)

答案 2 :(得分:0)

从技术上讲,只需一个明确的for-loop

即可实现
lst =  [['s1','s2','s3','s4', 's5', 's6'],
        ['d1','d2','d3','d4', 'd5', 'd6']]

# res = [map(lambda x,y: x+y, l[:len(l)//2], l[len(l)//2:]) for l in lst] # Python 2
res = [list(map(lambda x,y: x+y, l, l[len(l)//2:])) for l in lst] # Python 3

print(res) # [['s1s4', 's2s5', 's3s6'], ['d1d4', 'd2d5', 'd3d6']]

但这只是语法糖,因为for-loop内有隐含的第二map