Вопрос:
У меня есть два списка python, сгенерированные из двух разных таблиц базы данных
list1= [«‘HZ1398043′,’HZ1395693′,’HZ1395532′,’HZ1395240′,’HZ1395194′,’HZ1395113′,’HZ1395036′,’HZ1395236′,’HZ1396139′,’HZ1398028′,’HZ1395098′,’HZ1395998′,’HZ1395018′,’HZ1395829′,’HZ1398031′,’HZ1395708′,’HZ1398029′,’HZ1398030’,’HZ1398054»»] list2= [», », », », », ‘HZ1395018’, ‘HZ1395036’, ‘HZ1395098’, ‘HZ1395113’, ‘HZ1395194’, ‘HZ1395236’, ‘HZ1395240’, ‘HZ1395532’, ‘HZ1395693’, ‘HZ1395708’, ‘HZ1395829’, ‘HZ1395998’, ‘HZ1396139’, ‘HZ1398028’, ‘HZ1398029’, ‘HZ1398031’, ‘HZ1398043’, ‘HZ1397932’, ‘HZ1397949’, ‘HZ1398004’, ‘HZ1398021’, ‘HZ1398030’, ‘HZ1397940’, ‘HZ1397941’, ‘HZ1398010′,’, », »]
Мне нужно найти общие элементы между двумя
set(list1) & set(list2)
ничего не отображает
даже [i for я in list1 if я in list2] ничего не отображает. Я четко вижу, что HZ1398043 распространен.
Лучший ответ:
Посмотрите внимательно, ваш первый список на самом деле является списком с одним элементом, большой строкой.
>>> list1= [«‘HZ1398043′,’HZ1395693′,’HZ1395532′,’HZ1395240′,’HZ1395194′,’HZ1395113′,’HZ1395036′,’HZ1395236′,’HZ1396139′,’HZ1398028′,’HZ1395098′,’HZ1395998′,’HZ1395018′,’HZ1395829′,’HZ1398031′,’HZ1395708′,’HZ1398029′,’HZ1398030’,’HZ1398054»»] >>> len(list1) 1
В идеале, исправить везде, где вы получаете данные, чтобы дать вам правильные вещи, если это невозможно, вам нужно будет проанализировать данные.
Вы хотите сделать что-то вроде list1 = [item.strip(«‘») for item in list1[0].split(«,»)] чтобы получить фактический список (простое понимание списка), затем используйте один из ваших методы (метод set является наиболее эффективным, хотя, если вы хотите, чтобы дубликаты и порядок сохранялись, вам нужно будет сделать второй метод, хотя вы можете его улучшить, предварительно сделав набор list2 чтобы проверить наличие членства в).
Ответ №1def compare(list1,list2): ln= [] for i in list1: if i in list2: ln.append(i) return ln
печать (сравни (песни1, песни2))
не оптимизировать, но легко понять.
Ответ №2
Сначала вам нужно сделать правильный список из списка1, это можно сделать с помощью чего-то вроде:
list1 = [item.strip(«‘») for item in list1[0].split(«,»)]
Тогда ваш код должен работать нормально. Альтернативный (более компактный, но медленный) способ найти общие элементы:
common = filter(lambda x:x in list1,list2) Ответ №3
Это то, чем они должны быть:
list1= [‘HZ1398043′,’HZ1395693′,’HZ1395532′,’HZ1395240′,’HZ1395194′,’HZ1395113′,’HZ1395036′,’HZ1395236′,’HZ1396139′,’HZ1398028′,’HZ1395098′,’HZ1395998′,’HZ1395018′,’HZ1395829′,’HZ1398031′,’HZ1395708′,’HZ1398029′,’HZ1398030′,’HZ1398054’] list2= [», », », », », ‘HZ1395018’, ‘HZ1395036’, ‘HZ1395098’, ‘HZ1395113’, ‘HZ1395194’, ‘HZ1395236’, ‘HZ1395240’, ‘HZ1395532’, ‘HZ1395693’, ‘HZ1395708’, ‘HZ1395829’, ‘HZ1395998’, ‘HZ1396139’, ‘HZ1398028’, ‘HZ1398029’, ‘HZ1398031’, ‘HZ1398043’, ‘HZ1397932’, ‘HZ1397949’, ‘HZ1398004’, ‘HZ1398021’, ‘HZ1398030’, ‘HZ1397940’, ‘HZ1397941’, ‘HZ1398010’,», », »]
Ваш код работает после того, как вы их исправите.