Python列表中的列表内搜索

时间:2013-09-29 17:05:47

标签: python list

为什么以下代码不起作用?

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]?

5 个答案:

答案 0 :(得分:2)

列表在Python中为0索引,因此["4", "5"][1]"5",而不是"4"

另外,您是否要检查"4"是在子列表中还是在子列表中的第一个位置?如果是前者,则可能需要使用if search in sublist

请注意,正如Noctua在评论中所提到的,你只会在这里查看第一个子列表,因为在任何情况下都是break,所以你可能想要删除该语句,至少在else分支。

答案 1 :(得分:2)

使用generator expressionsany内置函数很容易做到:

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}}!