简体   繁体   中英

Creating a new list based on lists of tuples

Let's assume there is a list of tuples:

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

and it returns

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

And I have created two other lists containing certain elements from the x.something():

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

So I want to assign the tuples from x.something() to a new list based on y and z by

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

What I would like to have is the newlist looks like:

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

But I've got

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

What went wrong and how to fix it?

I think you want to get if something in y instead of if something in 'y' because they are two seperate lists, not strings:

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

try this:

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)

output:

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

You should remove the quotes from if something in 'y' because it assumes that you're checking if something is in the string 'y' . Same for z .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM