我需要检查变量是否在列表列表中,如果它返回子列表。我尝试了许多不同的解决方案,但没有一个能够解决......
我的代码:
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']]
答案 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())