У меня есть 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 для циклов.
Помоги мне






Это ваши исходные данные:
>>> 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]]. Помоги мне
но 2-й и 3-й подсписки в list1 имеют значения в list2, но не расположены последовательно как list1.
@learningstudent, я думаю, вам стоит разместить в своем посте образцы желаемых результатов.
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 Я добавил сортировку по первому элементу в каждом подсписке, чтобы учесть ваши дополнительные требования. Пожалуйста, дайте мне знать, если вам потребуется дополнительная помощь в понимании того, почему выполняется каждый шаг.
@HarshaB Отметил и спасибо! Я добавлю несколько комментариев в код.
Могу предложить преобразовать основной список в 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: Спасибо.
помогите мне даже list2 вроде этого list2 = [['a', 5], ['c', 8], ['b', 3]].