如何检查字符串是否在列表中,如果是,则返回子列表?

时间:2016-02-29 10:00:49

标签: python python-3.x

我需要检查变量是否在列表列表中,如果它返回子列表。我尝试了许多不同的解决方案,但没有一个能够解决......

我的代码:

addressList = [['JohnSmith', 'NR87TYH', 'PE26RE', '1EnglandRoad', '67'],['JaneSmithe', 'UY34DSF', 'SW147EG', '23SouthDrive', '82'], ['JimmyJones', 'PL20DCH', 'NW33EX', '145EastRidings', '54']]

numPlate = "UY34DSF"

for sublist in addressList:
    if numPlate in sublist:
        print("Ding dong the witch is dead!")

我应该在这里澄清一些事情。 "地址列表"变量是一个CSV文件,它被剥离到一个列表中,显示在上面。

这或其他15种左右的不同方法可以起作用,但我觉得这是最接近的,因为逻辑是有意义的。我错过了一些明显的东西吗?

谢谢!

编辑:好的,谢谢你的回答让我仔细检查我的代码中的所有内容,但它仍然没有工作,所以我复制了它并粘贴了下面的整个代码。

'第1行'从文件中返回我想要的值。

' reading2'返回列表应该是。

由此,我在原始问题中包含的迭代应该可以正常工作,但不是吗?有什么想法吗?

import csv

fopen = open("StandardUKReg.txt","r")
line1 = fopen.readline()
fopen.close()

with open("OwnerInfoCSV.csv", "r") as inf:
    reading2 = list(csv.reader(inf, skipinitialspace=True))

for sublist in reading2:
    if line1 in sublist:
        print("yay")


print(line1) # This displays "UY34DSF"

print(reading2) # This displays the below list of lists:

[['Name', 'Reg', 'Postcode', 'Address', 'Speed'], ['JohnSmith', 'NR87TYH', 'PE26RE', '1EnglandRoad', '67'], ['JaneSmithe', 'UY34DSF', 'SW147EG', '23SouthDrive', '82'], ['JimmyJones', 'PL20DCH', 'NW33EX', '145EastRidings', '54'], ['VinnyJones', 'TD53BFC', 'NG167YT', '95BirdRoad', '79'], ['ClarkKent', 'FH45NFH', 'SE89YG', '8NorthAvenue', '56']]

2 个答案:

答案 0 :(得分:2)

这将创建包含字符串的所有列表的列表。

matching_lists = [ls for ls in addressList if numPlate in ls]

答案 1 :(得分:0)

当您阅读例如line1,它可能有无形的回车或可能的空间连接。通过例如检查打印line1的长度,或在它之前/之后打印一些东西。当然,这些不可见的字符会阻止line1匹配列表中的任何内容。使用strip()进行清理,例如:

import string
line1 = string.strip(fopen.readline())