Rumah > Soal Jawab > teks badan
[('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]
怪我咯2017-04-17 17:45:28
Ia sangat mudah, hanya gunakan pemahaman senarai:
arr1 = [('d', 100), ('c', 99), ('a', 89), ('b', 86)]
arr2 = [pair[0] for pair in arr1]
Saya melihat soalan asal anda dan menulis versi ringkas, anda boleh merujuknya:
(Berlaku untuk Python2.7 , Python3)
from collections import Counter
def top_k_frequent(lst, k):
return [key for key, count in Counter(lst).most_common(k)]
Gunakan :
lst = [1, 1, 1, 2, 3, 4, 4]
print(top_k_frequent(lst, 2))
Kesan:
[1, 4]
Penerangan:
Untuk Python 2.7 dan versi yang lebih baru, terdapat kelas collections
tersedia dalam pustaka Counter
.
Untuk kaedah operasi terperinci, sila rujuk objek Kaunter
Menggunakan Counter(lst)
anda boleh mendapatkan contoh Counter
dengan mudah, yang telah mengira elemen dalam lst
. 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, gunakan list comprehension
untuk mengalih keluar elemen itu sendiri:
$>> from collections import Counter
$>> counter = Counter([1, 1, 1, 2, 3, 4, 4])
$>> counter
Counter({1: 3, 4: 2, 2: 1, 3: 1})
$>> most_items = counter.most_common(2)
$>> most_items
[(1, 3), (4, 2)]
$>> [key for key, count in most_items]
[1, 4]