簡體   English   中英

python不通過readlines()進行迭代

[英]python not iterating by line with readlines()

我有一個文本文件,每行只有一個字符串。 我想讓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出現的testset ,則可以使用集合而不是列表。 以下單行代碼將創建一個包含文件中每個唯一行的集合:

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

您可以將extend視為append的附加值,而不只是一個值。 因為無論如何您打算使用計數器來對文件進行計數,所以我將執行以下操作以鍵入唯一值:

with open('text.txt') as text:
    data = Counter(i for i in text) # try data.keys()

編輯:看看NPE的答案 :基本上是相同的,但是更加優雅和Pythonic。

嘗試一次閱讀,拆分和減少:

textset = set(file.read().split('\n'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM