我有
a = [1, 2]
b = ['a', 'b']
I want
c = [1, 'a', 2, 'b']
我有
a = [1, 2]
b = ['a', 'b']
I want
c = [1, 'a', 2, 'b']
[j for i in zip(a,b) for j in i]
for
之前的所有内容截断并移到最后,然后阅读:for i in zip(a, b)
, for j in i
, j
。请注意,本文仅是翻译,不包括解释或其他内容。 - anton.burgerif index==3:
break
for index in matrixF:
print index
,它仍在起作用,因此我认为它仍然是可迭代的? ._. - Budi Mulyo[item for pair in zip(a, b) for item in pair]
如果您想起for
和if
子句是按顺序执行的,并紧接着最终结果的追加,那么在您的头脑中就足够简单了:
temp = []
for pair in zip(a, b):
for item in pair :
temp.append(item )
使用索引切片的备选方法,比zip更快且更易扩展:
def slicezip(a, b):
result = [0]*(len(a)+len(b))
result[::2] = a
result[1::2] = b
return result
len(a) == len(b)
时才会起作用,但是添加条件以模拟zip将不会随着a或b的增长而扩展。与之相比:a = range(100)
b = range(100)
%timeit [j for i in zip(a,b) for j in i]
100000 loops, best of 3: 15.4 µs per loop
%timeit list(chain(*zip(a,b)))
100000 loops, best of 3: 11.9 µs per loop
%timeit slicezip(a,b)
100000 loops, best of 3: 2.76 µs per loop
slicezip([1,2,3],[4,5])
,这意味着在这种情况下您不必处理不均匀的列表(非常好)。 - TemporalWolf如果您关心顺序:
#import operator
import itertools
a = [1,2]
b = ['a','b']
#c = list(reduce(operator.add,zip(a,b))) # slow.
c = list(itertools.chain.from_iterable(zip(a,b))) # better.
print c
输出 [1, 'a', 2, 'b']
x = [1 , 2 , 3]
y = ["a" , "b" , "c"]
z =list(zip(x,y))
print(z)
这里是一个标准/自说明的解决方案,希望有人会觉得它有用:
a = ['a', 'b', 'c']
b = ['1', '2', '3']
c = []
for x, y in zip(a, b):
c.append(x)
c.append(y)
print (c)
输出:
['a', '1', 'b', '2', 'c', '3']
def main():
drinks = ["Johnnie Walker", "Jose Cuervo", "Jim Beam", "Jack Daniels,"]
booze = [1, 2, 3, 4, 5]
num_drinks = []
x = 0
for i in booze:
if x < len(drinks):
num_drinks.append(drinks[x])
num_drinks.append(booze[x])
x += 1
else:
print(num_drinks)
return
主函数()
c = []
c.extend(a)
c.extend(b)