[('d', 100), ('c', 99), ('a', 89), ('b', 86)]如何快速得出['d','c','a','b']
arr1 = [('d', 100), ('c', 99), ('a', 89), ('b', 86)]
arr2 = []
for key in range(len(arr)):
arr2.append(arr[key][0])
感觉好low,有什么好的办法吗?
其实在用Python中在刷leetcode来学习
题目:https://leetcode.com/problems/top-k-frequent-elements/
class Solution(object):
def topKFrequent(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: List[int]
"""
items = {}
for item in nums:
if items.has_key(item):
items[item]+=1
else:
items[item]=1
arr1 = sorted(items.iteritems(), key=lambda asd:asd[1], reverse=True)
arr2 = []
for key in range(len(arr1)):
arr2.append(arr1[key][0])
return arr2[0:k]
Ia sangat mudah, hanya gunakan pemahaman senarai:
Saya melihat soalan asal anda dan menulis versi ringkas, anda boleh merujuknya:
(Berlaku untuk Python2.7 , Python3)
Gunakan :
Kesan:
Penerangan:
Untuk Python 2.7 dan versi yang lebih baru, terdapat kelas
collections
tersedia dalam pustakaCounter
.Untuk kaedah operasi terperinci, sila rujuk objek Kaunter
Menggunakan
Counter(lst)
anda boleh mendapatkan contohCounter
dengan mudah, yang telah mengira elemen dalamlst
. Selepas, anda boleh mendapatkan senarai tupel yang diisih dengan mudah dengan menggunakan kaedah
most_common(k)
, dan hanya item dengan kekerapan kejadian tertinggi yang akan kekal Akhir sekali, gunakanlist comprehension
untuk mengalih keluar elemen itu sendiri: