-2

我需要 Python 来搜索给定列表的所有子列表,但是当我搜索仅包含在其中一个中的元素时,这不起作用。例如,这是我的代码:

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

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

如果我的搜索包含在列表的所有子列表中,这将非常有效。但是,如果我的搜索是,例如,5,那么我得到:

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

编辑:基本上,我需要 Python 列出搜索包含的所有列表,但如果搜索只包含在一个子列表中,我只想要print("there", sublist). 换句话说,我只希望 Python 识别搜索所在的位置,而不是输出它不在的位置,所以 no print("not there") print(data)

4

5 回答 5

2

尝试使用布尔标记。例如:

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)

这样,打印数据就在 for 循环之外,并且不会在每次找到不包含搜索的子列表时打印。

于 2013-10-02T01:07:33.987 回答
1

您可能试图写的内容:

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

一个更好的写法:

any(search in sublist for sublist in data)
于 2013-10-02T01:11:14.067 回答
1
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')

else如果您不想对不包含搜索值的子列表执行任何操作,则没有理由包含该子句。

一个很好的用法else是在for块之后(但这只会找到一个条目)(doc):

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

如果它else通过整个循环而不命中break.

于 2013-10-02T00:59:56.937 回答
0

数据 = [[4,5],[4,7],[5,6],[4,5]]

搜索 = 5

对于数据中的子列表:

if search in sublist:

    print "there in ",sublist

else:
    print "not there in " , sublist

在 [4, 5]

[4, 7] 中没有

在 [5, 6]

在 [4, 5]

我刚刚尝试了您的代码,但在搜索 5 时我没有发现任何问题

于 2013-12-13T06:44:50.533 回答
0

您可能正在寻找

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

print(data)
于 2013-10-02T01:01:40.083 回答