if语句检查它们是否相同

时间:2018-06-24 06:27:25

标签: python python-3.x

所以我从计算机上的文件中获取列表

我正在查看文件中的名称是否等于某个名称

for i in names:
if names[i] == "paaches":
    NotTaken.append(names(i))
else:
    print(i)

但是我一直得到这个

    File "/Users/rj-mac/Desktop/python/learn.py", line 10, in <module>
    if names[i] == "paaches":
TypeError: list indices must be integers or slices, not str

我的整个代码

 names = open("usernames.txt").readlines()
NotTaken = []


    for i in names:
        if i == "paaches":
            NotTaken.append(names[i])
        else:
            pass
    print(NotTaken)

    usernames.txt

    paaches
    testuser
    notueser

2 个答案:

答案 0 :(得分:0)

如果您读到错误,则表示列表的索引(或索引)不能为字符串。这意味着您的for循环正在返回i的字符串,这是列表的无效索引。

for在python中循环的工作方式是如果您有一个列表:

l = ["item1", "item2", "item3"]

执行以下操作将为列表item中的每个项目打印l

for item in l:
    print item

因此,无需检查names[i],只需检查i是否等于"paaches",并在匹配时附加i(不是names[i]) :

for i in names:
    if i == "paaches":
        NotTaken.append(i)
    else:
        print(i)

EDIT

它对您不起作用的原因是,当您执行names = open("filename.txt").readlines()时,names列表中的每个项目的末尾都将带有\n(即列表为{{1 }}。

要解决此问题,请在读取文件后使用names = ["paaches\n", "testuser\n", "notueser\n"](在字符串末尾添加换行符和空格):

rstrip()

然后,您可以使用names = open("usernames.txt").readlines() new_names = [] for name in names: name = name.rstrip() new_names.append(name) 循环:

for

答案 1 :(得分:-2)

您必须使用strip()来执行此操作,因为readlines()将输出类似['paaches\n', 'testuser\n', 'notueser']的列表:

names = open("usernames.txt").readlines()
NotTaken = []
for i in names:
    if i.strip() == "paaches":
        NotTaken.append(i.strip())
    else:
        pass
print(NotTaken)

输出:

['paaches']