从出现在外部文本fi中的列表中删除项目

2024-10-02 22:28:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图获取一个列表并将其与文本文件进行比较,从文本文件中显示的列表中删除元素。在

我的密码是:

baselist = open("testfile.txt", 'r')
twolist = ["one","two","three","four","five"]
for y in baselist:
    for x in range(0,len(twolist)):
        print("Working %s vs %s") % (twolist[x], y)
        if twolist[x] == y:
            print("Match!")
            remove.twolist[x]
baselist.close()

当我运行这个程序时,我可以在输出中看到它正在比较“一”与“一”,等等,显然问题出在if twolist[x] == y:但就我的一生而言,我无法让它发挥作用。我读了又读,又搜又搜,但很明显我遗漏了一些东西。有人能给我指出正确的方向吗?在


Tags: intxt元素密码列表forifopen
2条回答

您错过了rstrip()。在

if twolist[x] == y.rstrip():

不要在遍历列表时修改它。在

更好地使用列表理解,并使用集合使其更快:

^{pr2}$
  • 打开文件通常用with

  • 从文件中读取时,新行字符不会被删除;因此,例如,'two\n' != 'two'并且比较测试失败。使用.strip()或.rstrip()删除空格,包括后面的换行符

  • for index in range(len(mylist))通常是一个不好的符号;最好将列表作为for value in mylist操作,并将其过滤为[value for value in mylist if test(value)]

  • 您的第一个print语句缩进错误

  • 您的remove语法是错误的;应该是twolist.remove(x),请注意,这只会删除x的第一个出现

  • 您的算法是O(mn),其中m是baselist中的行数,n是twolist中的行数;稍微小心,它可以是O(m+n)。

如果原始顺序很重要

with open('testfile.txt') as inf:
    twoset = set(twolist).difference(line.strip() for line in inf)

twolist = [item for item in twolist if item in twoset]

否则

^{pr2}$

相关问题 更多 >