所以我需要定義一個函式,它回傳一個按特定順序排列的串列,并給出每個值出現的次數。
例如,假設我有這個輸入:
["s", "w", "h", "s", "h"]
我需要我的函式來回傳這個:
[2, 2, 1]
其中2是s出現的次數,后面的2是h出現的次數,1是w出現的次數。
我已經堅持了很長一段時間,這是我走了多遠:
def item_order(list):
sort_order = {"s": 0, "h": 1, "w": 2}
list.sort(key=lambda val: sort_order[val[1]])
但我不確定這是否是正確的方法。任何幫助將不勝感激!
uj5u.com熱心網友回復:
您可以使用collections.Counter來計算專案的數量。例如:
from collections import Counter
def item_order(lst):
weights = {"s": 0, "h": 1, "w": 2}
rv = sorted(lst, key=weights.get)
return rv, Counter(rv)
lst = ["s", "w", "h", "s", "h"]
sorted_list, cnt = item_order(lst)
print(sorted_list)
print(cnt) # or list(cnt.values())
印刷:
['s', 's', 'h', 'h', 'w']
Counter({'s': 2, 'h': 2, 'w': 1})
uj5u.com熱心網友回復:
# A set for values already seen
seen_characters = set()
# Function sorts a list of characters, calculates count of unique characters
# Parameter: list -> of characters
# Returns: list -> of numbers
def item_order(character_list):
result = []
character_list.sort()
for character in character_list:
if character not in seen_characters:
result.append(character_list.count(character))
seen_characters.add(character)
return result
given_list = ['s', 'w', 'h', 's', 'h']
print(item_order(given_list))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314351.html
上一篇:R中出現的元素的總和
