[('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]
これは非常に簡単です。リスト内包表記を使用するだけです。
リーリー私はあなたの元の質問を見て、簡潔なバージョンを書きました。それを参照してください:
リーリー(Python2.7+、Python3 に適用可能)
:
を使用します リーリー効果:
リーリー説明:
Python 2.7 以降のバージョンの場合、
collections
ライブラリで使用できるクラスCounter
があります。詳しい操作方法はCounterオブジェクトを参照
Counter(lst)
を使用すると、Counter
内の要素が既にカウントされているlst
インスタンスを簡単に取得できます。の後は、
most_common(k)
メソッドを使用して簡単にソートされたタプルのリストを取得できます。最後に、list comprehension
を使用して要素自体を削除します。 > リーリー