Python 在列表的同一子列表中搜索多个元素
我试图让Python在我的列表中搜索包含两个搜索词的子列表,但我得到的是包含一个或多个搜索的任何子列表。这是我的密码:Python 在列表的同一子列表中搜索多个元素,python,list,sublist,Python,List,Sublist,我试图让Python在我的列表中搜索包含两个搜索词的子列表,但我得到的是包含一个或多个搜索的任何子列表。这是我的密码: search1 = 4 search2 = 3 data = [[4,3],[4,7], [6,3], [9,2]] found = False for sublist in data: if search1 in sublist: print("there", sublist) if search2 in sublist:
search1 = 4
search2 = 3
data = [[4,3],[4,7], [6,3], [9,2]]
found = False
for sublist in data:
if search1 in sublist:
print("there", sublist)
if search2 in sublist:
print("there", sublist)
found = True
if(found==False):
print("not there")
print(data)
if(found==False):
print("not there")
print(data)
我得到的结果是:
there [4,3] #I only want this sublist, and only once.
there [4,3]
there [6,3] #I don't want this sublist.
干杯!5813有一些更好的方法(您可能希望在列表中查找排序方法的“key”参数),您发布的代码的问题在第7行:
print(“There”,sublist)
。只应在两次检查都通过后打印,但该行位于第一次检查之后第二次检查之前。我建议删除该行,并使用和将嵌套的if合并到单个if语句中
for sublist in data:
if search1 in sublist and search2 in sublist:
print("there", sublist)
break
您的问题是,在代码中,您正在搜索第一个值,然后分别搜索第二个值。您需要进行搜索,以确保两者都在同一个子列表中,否则您将获得包含其中任何一个值的所有子列表
break
语句确保子列表只打印一次
更新:
回答你的评论,是的,它实际上比上面的代码轻得多。这是:
data = [[4,3],[4,7], [6,3], [9,2]]
search = [4,3]
if search in data:
print 'yes',search
首先,您只需要将一个搜索变量search
,设置为要查找的搜索值列表
其次,我们不再需要for循环,因为我们不再在子列表中查找单个数字,我们只是在列表中查找项
这样做的另一个好处是,现在您可以通过列表切片、添加新的搜索值或删除一些搜索值来更新您的搜索变量,还可以维护您要查找的顺序。在此之前,您必须添加新的搜索变量并将其添加到if语句中 您需要删除第一个“there”打印:
for sublist in data:
if search1 in sublist:
if search2 in sublist:
print("there", sublist)
found = True
根据对问题的描述,我认为您还应该删除第一个“if(found==False):”部分,否则您将得到多个“notthere”和数据的打印。在本例中-4次打印(3次冗余)。这将返回匹配的数据项:
>>> data = [[4,3],[4,7], [6,3], [9,2]]
>>> search = [3, 4]
>>> [i for i in data if all(k in i for k in search)]
[[4, 3]]
顺便说一句,编写“found==False”的惯用方法是“not found”。这真是太棒了,谢谢你,但是它是否可以扩展,以便search1必须是子列表中的第一项,search2必须是第二项?再次感谢。感谢您接受答案,我用您的问题更新了答案:)非常高兴接受这样一个彻底的答案,但是,我讨厌再次这样做:/,我计划将每个子列表附加到三个项目,但仍然只按前两个项目搜索它们。我该怎么做?例如,data=[[4,3,0],[4,7],[6,3],[9,2]
但是搜索仍然是[4,3],它将返回第一个子列表。但是(抱歉!)并不是所有的子列表都有三个项目,有些可能有两个,希望它仍然可以搜索它们。我想不出一种方法来完成这一点,而不影响我更新答案的效率。你可能想问一个关于它的问题,或者看看你是否能在其他地方找到它。如果我弄明白了,我也会把它贴在这里