Python无法正确读取列表

时间:2013-11-12 21:40:24

标签: python list

好的,下面是我的问题:

这个程序从文件读取,不使用rstrip('\ n')制作一个列表,这是我故意做的。从那里,它打印列表,对其进行排序,再次打印,将新的排序列表保存到文本文件,并允许您在列表中搜索值。

我遇到的问题是:

当我搜索名称时,无论我如何键入它,它都会告诉我它不在列表中。

代码工作直到我改变了我测试变量的方式。这是搜索功能:

def searchNames(nameList):
    another = 'y'
    while another.lower() == 'y':
        search = input("What name are you looking for? (Use 'Lastname, Firstname', including comma: ")

        if search in nameList:
            print("The name was found at index", nameList.index(search), "in the list.")
            another = input("Check another name? Y for yes, anything else for no: ")
        else:
            print("The name was not found in the list.")
            another = input("Check another name? Y for yes, anything else for no: ")

完整代码http://pastebin.com/PMskBtzJ

对于文本文件的内容:http://pastebin.com/dAhmnXfZ

想法?我觉得我应该注意到我已经尝试将(+'\ n')添加到搜索变量

3 个答案:

答案 0 :(得分:3)

你说明确没有删除换行符。

因此,您的nameList是一个字符串列表,如['van Rossum, Guido\n', 'Python, Monty\n']

但是您的searchinput返回的字符串,会有换行符。所以它不可能匹配列表中的任何字符串。

有几种方法可以解决这个问题。

首先,当然,您可以删除列表中的换行符。

或者,您可以在搜索过程中随意剥离它们:

if search in (name.rstrip() for name in nameList):

或者您甚至可以将它们添加到search字符串中:

if search+'\n' in nameList:

如果您正在进行大量搜索,我只会进行一次剥离并保留一个剥离名称列表。


作为旁注,搜索列表以查明名称是否在列表中,然后再次搜索以查找索引,有点傻。只需搜索一次:

try:
    i = nameList.index(search)
except ValueError:
    print("The name was not found in the list.")
else:
    print("The name was found at index", i, "in the list.")
another = input("Check another name? Y for yes, anything else for no: ")

答案 1 :(得分:0)

此错误的原因是列表中的任何输入都以“\ n”结尾。例如“john,smith \ n”。您的搜索功能比使用不包含“\ n”的输入。

答案 2 :(得分:-1)

你没有给我们太多的东西继续,但是使用sys.stdin.readline()而不是input()会有帮助吗?我不相信2.x input()会在输入的末尾留下换行符,这会使“in”运算符永远找不到匹配项。 sys.stdin.readline()确实将换行符保留在最后。

与set_中的'string'相比,list_中的'string'也很慢 - 如果你真的不需要索引,你可以使用一个集合,特别是如果你的集合很大。