Создание нового списка на основе списков кортежей

#python #list

#python #Список

Вопрос:

Предположим, что существует список кортежей:

 for something in x.something()
    print(something)
  

и он возвращает

 ('a', 'b')
('c', 'd')
('e', 'f')
('g', 'h')
('i', 'j')
  

И я создал два других списка, содержащих определенные элементы из x.something():

 y = [('a', 'b'), ('c', 'd')]
z = [('e', 'f'), ('g', 'h')]
  

Итак, я хочу присвоить кортежи из x.something() новому списку на основе y и z с помощью

 newlist = []
for something in x.something():
    if something in 'y':
        newlist.append('color1')
    elif something in 'z':
        newlist.append('color2')
    else:
        newlist.append('color3')
  

Я хотел бы, чтобы новый список выглядел так:

 ['color1', 'color1', 'color2', 'color2', 'color3']
  

Но у меня есть

 TypeError: 'in <string>' requires string as left operand, not tuple
  

Что пошло не так и как это исправить?

Комментарии:

1. вы имеете в виду something == "y" или y список, о котором мы не знаем?

2. они все равно не получат этот результат, поскольку в значениях, которые они нам показали, нет ни одного значения «y» или «z»

3. Привет, Ironkey! 🙂 Я пытался использовать x.something(), чтобы сделать историю короче, но это может быть плохой идеей. На самом деле это g.edges() из Networkx-пакета, а «что-то» на самом деле является ребрами, соединяющимися между двумя узлами. Итак, в этом примере есть 5 ребер между a и b, c и d, e и f и т.д. …

Ответ №1:

Я думаю, вы хотите получить if something in y вместо if something in 'y' , потому что это два отдельных списка, а не строки:

 newlist = []
for something in x.something():
    if something in y:
        newlist.append('color1')
    elif something in z:
        newlist.append('color2')
    else:
        newlist.append('color3')
  

Комментарии:

1. Большое спасибо, Васиф, ваш комментарий решил мою проблему 🙂 это было именно то, что пошло не так 🙂

Ответ №2:

Вы должны удалить кавычки из if something in 'y' , потому что предполагается, что вы проверяете, есть ли something в строке 'y' . То же самое для z .

Ответ №3:

попробуйте это:

 t = [('a', 'b'),
('c', 'd'),
('e', 'f'),
('g', 'h'),
('i', 'j')]

y = [('a', 'b'), ('c', 'd')]
z = [('e', 'f'), ('g', 'h')]
new_list = []
for x in t:
    if x in y:
        new_list.append('color1')
    elif x in z:
        new_list.append('color2')
    else:
        new_list.append('color3')
print(new_list)
  

вывод:

 ['color1', 'color1', 'color2', 'color2', 'color3']