2016-02-29 34 views
-1

我需要检查变量是否在列表中,并且是否返回子列表。我已经尝试了一些不同的解决方案,但他们没有工作...如何检查字符串是否在列表列表中,并返回子列表(如果是)?

我的代码:

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!") 

我应该在这里澄清一些事情。 “addressList”变量是一个CSV文件,被剥离到列表中,并按照上面所示的方式显示。

这或者其他15种不同的方法做不到这些,但我觉得这是最接近逻辑的。我错过了明显的东西吗?

谢谢!

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

'line1'从文件中返回我想要的值。

'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']] 
+1

您的代码适用于我 - 它打印叮当消息。好的,你改变了这个问题,没有时间去碰到一个移动的目标。 – barny

+0

工作正常,它打印消息。我也打印了子列表,它工作正常。 – Himanshu

+0

有趣!我看了一下,我可以看到“numPlate”变量正在文本前面以小写“t”被读取?我会谷歌,看看有什么。 – MildCorma

回答

2

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

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

当你阅读例如line1,它可能有不可见的回车或可能的空间连接。通过例如打印line1的长度,或者在它之前/之后立即打印某些内容。当然,这些不可见的字符会阻止line1与列表中的任何内容匹配。使用strip()来清理它,例如:

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

这指出我在正确的方向,但我最终使用'line1 [: - 1]'作为空间是字符串中的最后一个字符。谢谢! – MildCorma

+0

使用strip()更健壮,因为,例如,下次您编辑StandardUKReg.txt时,您可能碰巧没有在reg的末尾放置回车符,然后您简单地忽略最后一个字符的解决方案将失败再次。 Strip()也会删除多余的空间。 – barny

相关问题