iT邦幫忙

1

請教python list問題

初學拍森,請教各位大師問題><
輸入一個數字 n,隨後輸入 n 個正整數組成一個 list,進行排序。分別統計排序完的
list 中從小到大每一個數字出現的次數,將這些次數組成一個新的 list 並輸出
輸入範例:
5
3
1
2
1
2
輸出範例:
[2, 2, 1]

只寫出輸入的部分:
list=[]
n=eval(input())
for i in range(n):
....num=eval(input())
....list.append(num)

小魚 iT邦大師 1 級 ‧ 2019-12-02 01:53:03 檢舉
我怎麼覺得這一題哪裡看過?
20089677 iT邦新手 5 級 ‧ 2019-12-02 20:55:53 檢舉
不知道耶是學校助教出的題目~
2
一級屠豬士
iT邦高手 1 級 ‧ 2019-12-01 22:54:52
最佳解答
#!/usr/local/bin/python3

inputlst = []
n = eval(input())
for i in range(n):
  num = eval(input())
  inputlst.append(num)
# 先使用 sort 排序
# 使用 set 將 list 的元素 去掉重複
# 再使用 list 的 count() method 計算
# 包起來使用 List Comprehensions

inputlst.sort()
outlst = [ inputlst.count(x) for x in set(inputlst) ]
print(outlst)

# 但是這樣不夠清晰啊.我們來增加一些資訊吧,使用 dict
outdic = dict( (x, inputlst.count(x)) for x in set(inputlst) )
print(outdic)

Result:

5
3
1
2
1
2
[2, 2, 1]
{1: 2, 2: 2, 3: 1}
看更多先前的回應...收起先前的回應...
froce iT邦大師 3 級 ‧ 2019-12-01 23:37:50 檢舉

這題的出題風格超像C的,估計出題者自己也沒很熟python。

發問者是初學,盡量沿用他的code,好讓他思維延續.
另外我是一級屠豬士,不是屠豬士.

froce iT邦大師 3 級 ‧ 2019-12-02 00:30:07 檢舉

另外我是一級屠豬士,不是屠豬士.

已修正。

20089677 iT邦新手 5 級 ‧ 2019-12-02 20:57:44 檢舉

謝謝詳細的解題!

2
海綿寶寶
iT邦大神 1 級 ‧ 2019-12-01 22:37:04
List=[]
n=eval(input())
for i in range(n):
	num=eval(input())
	List.append(num)

a = {}
for i in List:
    if List.count(i)>=1:
        a[i] = List.count(i)        

a = sorted(a.items(), key=lambda item:item[0],reverse=False)

num=[]
for item in a:
    num.append(item[1])
print(num)

選我最佳解

20089677 iT邦新手 5 級 ‧ 2019-12-02 20:57:56 檢舉

謝謝你

3
froce
iT邦大師 3 級 ‧ 2019-12-01 23:53:09

超酷炫5行解決法:

n = int(input())
arr = sorted([int(input()) for i in range(n)])
output = dict((k, arr.count(k)) for k in set(arr))
print(list(output.values()))
print(output)

效果同一級屠豬士大大。XD
最佳解答不要選我,這只是讓你看看熟練python以後能得到多簡潔的code。

20089677 iT邦新手 5 級 ‧ 2019-12-02 20:57:20 檢舉

還是謝謝!!好厲害哈哈哈

我要發表回答

立即登入回答