Search for Multiple Sublists of Same List in Python

99封情书 提交于 2019-12-13 10:37:47

问题


I need Python to search all the sublists of a given list, but this does not work when I'm searching for an element contained in only one of them. For example, this is my code:

data = [[4,5],[4,7]]
search = 4
for sublist in data:
    if search in sublist:
        print("there", sublist)

    else:
        print("not there")
        print(data)

and this works very well if my search is contained in all of the sublists of the lists. However, if my search is, for instance, 5, then I get:

there [4,5] #I only want this part. 
not there # I don't want the rest. 
[[4, 5], [4, 7]] 

EDIT: Basically, I need Python to list all the lists the search is contained in, but if the search is only contained in one sublist, I only want the print("there", sublist). In other words, I only want Python to recognize the places the search is in, and not output where it is not, so no print("not there") print(data).


回答1:


Try using a boolean tag. For example:

data = [[4,5],[4,7]]
search = 5
found = false
for sublist in data:
    if search in sublist:
        print("there", sublist)
        found = true
if found == false:
    print("not there")
    print(data)

This way the print data is outside the for loop and won't be printed each time a sublist is found that does not contain search.




回答2:


What you were probably trying to write:

data = [[4,5],[4,7]]
search = 4
found = False
for sublist in data:
    if search in sublist:
        found = True
        break
# do something based on found

A better way to write that:

any(search in sublist for sublist in data)



回答3:


data = [[4,5],[4,7]]
search = 4
found_flag = False
for sublist in data:
    if search in sublist:
        print("there", sublist)
        found_flag = True

#     else:
#        print("not there")
#        print(data)
if not found_flag:
    print('not found')

There is no reason to include the else clause if you don't want to do anything with the sub-lists that don't include the search value.

A nifty use of else is after the for block (but this only will find one entry) (doc):

data = [[4,5],[4,7]]
search = 4
for sublist in data:
    if search in sublist:
        print("there", sublist)
        break
else:
    print 'not there'

which will execute the else block if it makes it through the whole loop with out hitting a break.




回答4:


You might be looking for

for sublist in data:
    if search in sublist:
        print("there", sublist)
        break
    else:
        print("not there")

print(data)



回答5:


data = [[4,5],[4,7],[5,6],[4,5]]

search = 5

for sublist in data:

if search in sublist:

    print "there in ",sublist

else:
    print "not there in " , sublist

there in [4, 5]

not there in [4, 7]

there in [5, 6]

there in [4, 5]

I just tried your code, and i am not seeing anything wrong while searching 5



来源:https://stackoverflow.com/questions/19128342/search-for-multiple-sublists-of-same-list-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!