Конкатенация элементов нескольких списков в один (по условию)
У меня есть четыре списка одинаковой длины:
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)]
Так ведь и проще и понятнее, если разобраться. Не надо никаких индексов по спискам, условия и вычисления все короткие и на виду.