各タプル(列挙)の最初の項目を使用する:
from collections import Counter
my_list =[11,11,11,11,12,12,15,15,15,15,15,15,20,20,20]
count = Counter(my_list)
div= list(count.keys()) # take only keys
div.sort()
l = []
num = 0
for i in div:
t = []
for j in range(count[i]): # loop number of times it occurs in the list
t.append(num)
num+=1
l.append(t)
print(l)
出力:
[[0, 1, 2, 3], [4, 5], [6, 7, 8, 9, 10, 11], [12, 13, 14]]
を使用した代替ソリューション10:
my_list =[11,11,11,11,12,12,15,15,15,15,15,15,20,20,20]
val = set(my_list) # filter only unique elements
ans = []
num = 0
for i in val:
temp = []
for j in range(my_list.count(i)): # loop till number of occurrence of each unique element
temp.append(num)
num+=1
ans.append(temp)
print(ans)
編集:私はここで
[[54, 21, 12, 45], [78, 41], [235, 7, 10, 4, 1, 1], [897, 5, 79]]
:@Protossリード
my_list =[11,11,11,11,12,12,15,15,15,15,15,15,20,20,20]
val = list(set(my_list)) # filter only unique elements
val.sort() # because set is not sorted by default
ans = []
index = 0
l2 = [54,21,12,45,78,41,235,7,10,4,1,1,897,5,79]
for i in val:
temp = []
for j in range(my_list.count(i)): # loop till number of occurrence of each unique element
temp.append(l2[index])
index+=1
ans.append(temp)
print(ans)
出力によって、コメントに言及して、所望の出力を得るために行われ、必要な変更を1として set
をlist
に変換すると、set
はソートされていないと思いますelfの説明。
別ソリューションの入力は常に(OrderedDict
を使用して)ソートされていない場合:
from collections import OrderedDict
v = OrderedDict({})
my_list=[12,12,11,11,11,11,20,20,20,15,15,15,15,15,15]
l2 = [54,21,12,45,78,41,235,7,10,4,1,1,897,5,79]
for i in my_list: # maintain count in dict
if i in v:
v[i]+=1
else:
v[i]=1
ans =[]
index = 0
for key,values in v.items():
temp = []
for j in range(values):
temp.append(l2[index])
index+=1
ans.append(temp)
print(ans)
出力:私は予測不可能なランダムで入力シーケンスの順序を(維持するためにOrderedDict
を使用ここで
[[54, 21], [12, 45, 78, 41], [235, 7, 10], [4, 1, 1, 897, 5, 79]]
)の場合はset
です。
私は@Ami Tavoryの方がよりPythonの方が良いですが。
[エキストラの仕事:誰もがlist comprehension
にこのソリューションを変換することができた場合は、私がしようとしたが、list comprehension
に変換することができないとあなたはコメントでそれを投稿してください成功すれば、それは私が理解するのに役立ちますので、それは素晴らしいだろう]
チェックアウト'itertools.groupby()'と 'enumerate()'です。 –
'def get_chunks(li、n):;範囲内のi(0、len(li)、n)に対しては です。yield li [i:i + n] 'このスライスは' 'li''をサイズ' n'のチャンクにリストします(最後のチャンクは '<= n'値を持ちます)。あなたのニーズに合わせて変更する方法を見てください。 – DeepSpace
@DeepSpace主な問題は何ですか、私はサイズ(n)のようなリストを使用することはできません。l1 = [3,2,4、] #size of parts'。私はl2 = [10,15,9,2,0,5,6,3,9]に分割する必要があります。結果は以下のようになります:res = [[10,15,9]、[9,2]、[0,6,3,9]] –