簡體   English   中英

Python過濾和排序列表

[英]Python filtering and sorting through a list

我似乎無法使它正常工作。 我需要打開文件ranger.txt。 閱讀每一行,然后將每一行分成單詞列表。 檢查每個單詞是否已經在列表中。 如果單詞不在列表中,則將其添加到列表中。 在程序結束時,按字母順序對結果單詞進行排序和打印。

結果應為:[“ a”,“ and”,“ buckle”,“ C130”,“ countrollin”,“ door”,“ down”,“ four”,“ Gonna”,“ Jump”,“ little”,“ out”,“ ranger”,“ Recon”,“ right”,“ Shuffle”,“ Standstrip”,“ the”,“ to”,“ take”,“ trip”,“ up”

我可以打印單個列表,甚至可以從每個列表中打印一個單詞,僅此而已。

rangerHandle = open("ranger.txt")
count = 0
rangerList = list()

for line in rangerHandle:
    line = line.rstrip()
    #print line works at this point
    words = line.split() # split breaks string makes another list
    #print words works at this point
    if words[count] not in words: 
        rangerList.append(words[count])        
        count += 1
    print rangerList

ranger.txt文件是:

C130 rollin down the strip
Recon ranger
Gonna take a little trip
Stand up, buckle up,
Shuffle to the door
Jump right out and count to four

如果您要否決票,請至少說明一下。

我們可以創建列表而不會找到重復項。 我們稍后將通過將列表轉換為集合來刪除它們。 然后,我們通過不區分大小寫的排序對集合進行排序:

with open("ranger.txt") as f:
    l = [w for line in f for w in line.strip().split()]
print(sorted(set(l), key=lambda s: s.lower()))

結果:

[
    'a', 'and', 'buckle', 'C130', 'count', 'door', 'down', 'four', 
    'Gonna', 'Jump', 'little', 'out', 'ranger', 'Recon', 'right', 
    'rollin', 'Shuffle', 'Stand', 'strip', 'take', 'the', 'to', 'trip',
    'up,'
]

首先,在處理文件( https://docs.python.org/2/tutorial/inputoutput.html )時最好使用with ...語法。

第二,如果我是你,我將使用集合( https://docs.python.org/2/library/sets.html )而不是列表。 它們的優點是您不能兩次添加相同的元素,因此您無需檢查單詞是否已在集合中。 對於每一行,我將使用該行上的單詞創建一個新集合,並使用union方法將其與其他單詞合並。

words = set([])
with open("ranger.txt") as f:
     for line in f:
         newset = set(line.rstrip().split())
         words = words.union(newset)
words = sorted(words) ## this line transforms the set into a sorted list

暫無
暫無

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

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