我有以下列表清单 -
[['s1','s2','s3','s4'],
['s5','s6','s7','s8'],
['s9','s10','s11','s12']]
我想将列表设为 -
[['s1s3','s2s4'],
['s5s7','s6s8'],
['s9s11','s10s12']]
列表中的列表可以包含4个以上的元素,但它始终包含偶数个元素。有没有使用两个for
循环的一般方法?我现在正在使用嵌套循环来做这个,我想避免嵌套循环。
答案 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
。