Конкатенация элементов нескольких списков в один (по условию)

У меня есть четыре списка одинаковой длины:

list_1 = ['1', '1', '3']
list_2 = ['4', '5', '6']
list_3 = ['7', '8', '9']
list_4 = ['a', 'b', 'c']

Нужно соединять соответствующие элементы в списках по условию:

  • если в списке list_1 значение равно '1', то соединяем list_2 и list_3
  • в противном случае соединяем list_2 и list_4.

На выходе получаем новый список:

['47', '58', '6c']

Перепробовал различные комбинации циклов и условий, но не выходит...


Ответы (4 шт):

Автор решения: nomnoms12

Удобно будет воспользоваться дополнительной переменной i для хранения индекса.

Пример:

list_1 = ['1', '1', '3']
list_2 = ['4', '5', '6']
list_3 = ['7', '8', '9']
list_4 = ['a', 'b', 'c']

result = []
for i in range(len(list_1)):
    if list_1[i] == '1':
        result.append(list_2[i] + list_3[i])
    else:
        result.append(list_2[i] + list_4[i])

print(result)

stdout:

['47', '58', '6c']
→ Ссылка
Автор решения: Kers

Как вариант:

list_1 = ['1', '1', '3']
list_2 = ['4', '5', '6']
list_3 = ['7', '8', '9']
list_4 = ['a', 'b', 'c']

res = []
for k, v in enumerate(list_1): # получаем элемент v и его индекс k
    if v == "1":
        res.append(list_2[k]+list_3[k]) # далее подставляем значения по индексу
    else:
        res.append(list_2[k]+list_4[k])

print(res)
→ Ссылка
Автор решения: Jack_oS
list_1 = ['1', '1', '3']
list_2 = ['4', '5', '6']
list_3 = ['7', '8', '9']
list_4 = ['a', 'b', 'c']

то же, но через list comprehension

result = [list_2[i]+list_3[i] if el=='1' else list_2[i]+list_4[i] for i, el in enumerate(list_1)]

результат:

>>> result
['47', '58', '6c']
→ Ссылка
Автор решения: CrazyElf

Что-то никто вариант с zip и индексацией по булевому значению условия не написал:

res = [x2 + (x4,x3)[x1 == '1'] for x1,x2,x3,x4 in zip(list_1,list_2,list_3,list_4)]

Так ведь и проще и понятнее, если разобраться. Не надо никаких индексов по спискам, условия и вычисления все короткие и на виду.

→ Ссылка