python 不使用 readlines() 逐行迭代

标签 python

我有一个文本文件,每行都只有字符串。我想让 python 查看一行,然后检查该字符串是否在列表中,如果没有添加它,否则跳到下一行。稍后我将使用集合来计算每个列表项的总出现次数。

testset = ['2']
# '2' is just a "sanity check" value that lets me know I am extending list

file = open('icecream.txt')

filelines = file.readlines()

for i in filelines:
    if i not in testset:
    testset.extend(i)
else:
    print(i, "is already in set")

print(testset)

我期望得到:

testset = ['2', 'chocolate', 'vanilla', 'AmericaConeDream', 'cherrygarcia', ...]

相反,我得到了:

testset = ['2', 'c', 'h', 'o', 'c', 'o' ....]        

不确定这里发生了什么。我尝试使用以下方法运行它: 对于文件中的 i:

正如我相信我在另一篇文章中读到的那样,open() 本身就是一个迭代器。有人可以告诉我如何让这个迭代工作吗?

最佳答案

extend() 迭代其参数的元素(在本例中为字符),并将每个元素单独添加到列表中。使用 append() 代替:

    testset.append(i)

如果您不关心测试集中各行出现的顺序,则可以使用集合而不是列表。以下一行将创建一个包含文件中每个唯一行的集合:

testset = set(open('icecream.txt'))

关于python 不使用 readlines() 逐行迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29953493/

相关文章:

python - SWI-Prolog 语义网库和 Python 接口(interface)

python - 生成基于文本的直方图

python - 如何使用python连接三个excel文件xlsx?

Python:exec 总是不好的做法吗?如果是,为什么不弃用

python - SQLite3 如何为多对多关系创建插入语句?

Mac 上的 Python : Is it safe to set OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES globally?

python - 如何使用 matplotlib 制作学生风格的图表?

python - 打开文件的最pythonic方式是什么?

python - 未正确调用 DataFrame 构造函数!错误

Python文件输出添加奇怪的字符