为什么以下代码不起作用?
data = [["4","5"],["3","7"]]
search = "4"
for sublist in data:
if sublist[1] == "4":
print ("there"), sublist
break
else:
print("not there")
break
非常抱歉所有的困惑,每个人。我试图检查整个列表及其所有子列表,我不明白这只会检查列表的第二个元素,因为我忘了Python第一个元素的第0个位置。但是,我如何查看整个列表?删除“break”和[1]?
答案 0 :(得分:2)
列表在Python中为0索引,因此["4", "5"][1]
为"5"
,而不是"4"
。
另外,您是否要检查"4"
是在子列表中还是在子列表中的第一个位置?如果是前者,则可能需要使用if search in sublist
。
请注意,正如Noctua在评论中所提到的,你只会在这里查看第一个子列表,因为在任何情况下都是break
,所以你可能想要删除该语句,至少在else
分支。
答案 1 :(得分:2)
使用generator expressions和any
内置函数很容易做到:
data = [["4","5"],["3","7"]]
search = "4"
if any(element == search for sublist in data for element in sublist):
print ("there")
else:
print("not there")
甚至更短,正如@Veedrac在评论中指出的那样:
if any(search in sublist for sublist in data):
print ("there")
else:
print("not there")
编辑:如果你想打印找到元素的子列表,就必须使用显式循环,如@ thefourtheye的回答所示:
for sublist in data:
if search in sublist:
print("there", sublist)
break
else:
print("not there")
答案 2 :(得分:2)
data = [["4","5"],["3","7"]]
search = "4"
for sublist in data:
if search in sublist:
print ("there", sublist)
break
else:
print("not there")
答案 3 :(得分:0)
托马斯说,+你在任何情况下都要打破,所以在主列表中的第一个元素之后,你只是打破了for循环而没有检查任何其他元素。你需要的是:
data = [["4","5"],["3","7"]]
search = "4"
for sublist in data:
if sublist[0] == "4":
print "there", sublist
break
else:
print "not there" # executed when the for-loop finishes without break
答案 4 :(得分:0)
写作时
if sublist[1] == "4":
您正在检查2 nd 元素是否为“4”。
要检查"4"
是 <{em> sublist
,请使用
if "4" in sublist:
要检查"4"
是否在第1位,请使用
if sublist[0] == "4":
此外,在break
之后,您else
,所以如果第一个list
没有匹配,则不检查后面的break
!删除{{1}}!