[英]convert list of strings to unique lowercase, preserving order (python 2.7)
我想將字符串列表轉換為小寫並在保留順序的同時刪除重復項。 我在StackOverflow上發現的許多單行Python魔術將字符串列表轉換為小寫字母,但似乎順序丟失了。
我已經編寫了下面的代碼,該代碼可以正常工作,並且很高興堅持使用。 但是我想知道是否有一種方法可以實現更多的Python語言和更少的代碼(如果將來我要寫類似的東西,那么可能會減少錯誤的發生。這花了我相當長的時間來寫)。
def word_list_to_lower(words):
""" takes a word list with a special order (e.g. frequency)
returns a new word list all in lower case with no uniques but preserving order"""
print("word_list_to_lower")
# save orders in a dict
orders = dict()
for i in range(len(words)):
wl = words[i].lower()
# save index of first occurence of the word (prioritizing top value)
if wl not in orders:
orders[wl] = i
# contains unique lower case words, but in wrong order
words_unique = list(set(map(str.lower, words)))
# reconstruct sparse list in correct order
words_lower = [''] * len(words)
for w in words_unique:
i = orders[w]
words_lower[i] = w
# remove blank entries
words_lower = [s for s in words_lower if s!='']
return words_lower
略微修改“ 如何在保留順序的同時從列表中刪除重復項”中的答案?
def f7(seq):
seen = set()
seen_add = seen.add
seq = (x.lower() for x in seq)
return [x for x in seq if not (x in seen or seen_add(x))]
您也可以:
pip install orderedset
接着:
from orderedset import OrderedSet
initial_list = ['ONE','one','TWO','two','THREE','three']
unique_list = [x.lower() for x in list(OrderedSet(initial_list))]
print unique_list
只需執行以下操作:
initial_list = ['ONE','one','TWO','two']
uninique_list = [x.lower() for x in list(set(initial_list))]
print unique_list
initial_list = ['ONE','one','TWO','two']
new_list = []
[new_list.append(s.lower()) for s in initial_list if s.lower() not in new_list]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.