Добавление элементов в подсписок списка на основе условия в python

У меня есть 2 списка, как показано ниже

list1=[['a',2,3],['b',4,5],['c',6,7]]
list2=[['a',5],['b',3],['c',8]]

Я хочу присоединиться к этим 2 спискам как к 1 списку на основе условия в подсписке. если 1-й элемент подсписка в list1 равен 1-му элементу подсписка в list2, то 2-й элемент подсписка в list2 должен быть добавлен в list1

вот результат должен быть

list1=[['a',2,3,5],['b',4,5,3],['c',6,7,8]]

я могу сделать это для одного элемента списка, как показано ниже

list1=['a',2,3]
list3=['a',5]

if list1[0]==list3[0]:
   list1.extend(list3[1:])
else:
   list1
print list1

помогите мне сделать то же самое для подсписка, как упомянуто выше. я не могу применить 2 для циклов.

Помоги мне

помогите мне даже list2 вроде этого list2 = [['a', 5], ['c', 8], ['b', 3]].

learningstudent 19.12.2018 09:20
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
160
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это ваши исходные данные:

>>> list1=[['a',2,3],['b',4,5],['c',6,7]]
>>> list2=[['a',5],['b',3],['c',8]]

Затем мы застегивать ваши списки и используем их понимание для создания нового списка:

>>> [ a+b[1:] for a,b in zip( list1, list2 ) if a[0] == b[0] ]

Результаты:

[['a', 2, 3, 5], ['b', 4, 5, 3], ['c', 6, 7, 8]]

Всего в одной строчке кода :)

Отредактировано 1

thanks but its not working if the list2=[['a',5],['c',8],['b',3]]. Help me

>>> list1=[['a',2,3],['b',4,5],['c',6,7]]
>>> list2=[['a',5],['c',8],['b',3]]  # <--- other list2

Использование if в другом месте:

>>> [ a+ ( b[1:] if a[0] == b[0] else [] )  for a,b in zip( list1, list2 ) ]

Результаты:

[['a', 2, 3, 5], ['b', 4, 5], ['c', 6, 7]]

Отредактировано 2

but the 2nd and 3rd sublist in list1 has values in list2 but its not arranged in sequence as list1.

Сортировка перед застежкой-молнией.

>>> zipped_sorted_list = zip( sorted(list1), sorted(list2) ) 
>>> [ a+ ( b[1:] if a[0] == b[0] else [] ) for a,b in zipped_sorted_list ]

Результаты

[['a', 2, 3, 5], ['b', 4, 5, 3], ['c', 6, 7, 8]]

спасибо, но он не работает, если list2 = [['a', 5], ['c', 8], ['b', 3]]. Помоги мне

learningstudent 19.12.2018 09:19

но 2-й и 3-й подсписки в list1 имеют значения в list2, но не расположены последовательно как list1.

learningstudent 19.12.2018 09:44

@learningstudent, я думаю, вам стоит разместить в своем посте образцы желаемых результатов.

dani herrera 19.12.2018 09:46
list1=[['a',2,3],['b',4,5],['c',6,7]]
list2=[['a',5],['b',3],['c',8]]
#Sort the lists by first element in each sublist
list1.sort(key=lambda x: x[0]) 
list2.sort(key=lambda x: x[0])
#this count is used with the next loop in order to keep track of comparison 
#between list1's sublists with list2's sublists.
count = 0 
for sublist in list1:
    if sublist[0] == list2[count][0]: #comparison logic here
        sublist.extend(list2[count][1:])
    count += 1 #increment the count each loop
print (list1)

он не работает, если list2 = [['a', 5], ['c', 8], ['b', 3]]. Помоги мне

learningstudent 19.12.2018 09:20

Этот ответ пришел в посте низкого качества. Добавьте объяснение, даже если код не требует пояснений

Harsha Biyani 19.12.2018 09:51

@learningstudent Я добавил сортировку по первому элементу в каждом подсписке, чтобы учесть ваши дополнительные требования. Пожалуйста, дайте мне знать, если вам потребуется дополнительная помощь в понимании того, почему выполняется каждый шаг.

ycx 19.12.2018 10:26

@HarshaB Отметил и спасибо! Я добавлю несколько комментариев в код.

ycx 19.12.2018 10:27
Ответ принят как подходящий

Могу предложить преобразовать основной список в dict:

dict1 = { e[0]:e[1:] for e in list1 }
print(dict1)
#=> {'a': [2, 3], 'c': [6, 7], 'b': [4, 5]}

Затем переберите list2, добавляя элементы к dict:

for e in list2:
  dict1[e[0]].extend(e[1:])
#=> {'a': [2, 3], 'c': [6, 7], 'b': [4, 5]}

Если вам нужно вернуть его в виде списка (для сортировки):

result = [ [k] + v for k, v in dict1.items() ]
print(result)
#=> [['a', 2, 3, 5], ['c', 6, 7, 8], ['b', 4, 5, 3]]

@iGain: Спасибо.

learningstudent 19.12.2018 09:36

Другие вопросы по теме