Подтвердить что ты не робот

Как объединить два списка в один список?

У меня

a = [1, 2]
b = ['a', 'b']

Я хочу

c = [1, 'a', 2, 'b']
4b9b3361

Ответ 1

[j for i in zip(a,b) for j in i]

Ответ 2

Если порядок элементов сильно соответствует порядку в вашем примере, вы можете использовать комбинацию zip и chain:

from itertools import chain
c = list(chain(*zip(a,b)))

Если вы не заботитесь о порядке элементов в своем результате, тогда есть более простой способ:

c = a + b

Ответ 3

Разбор

[j for i in zip(a,b) for j in i]

в вашей голове достаточно легко, если вы помните, что предложения for и if выполняются в порядке, после чего добавляется окончательный результат:

temp = []
for i in zip(a, b):
    for j in i:
        temp.append(j)

и было бы легче, если бы оно было написано с более значимыми именами переменных:

[item for pair in zip(a, b) for item in pair]

Ответ 4

Альтернативный метод с использованием обрезки индекса, который оказывается более быстрым и масштабируется лучше, чем 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

Ответ 5

Если вы заботитесь о порядке:

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

Ответ 6

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

Основной()

Ответ 7

Вот стандартное/самоочевидное решение, я надеюсь, что кто-то найдет его полезным:

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

Конечно, вы можете изменить его и выполнять манипуляции с значениями при необходимости

Ответ 8

c = []
c.extend(a)
c.extend(b)