a = [58,23,12,24,11,63,54]
我想把上面的清单列如下:
[[58,54],[23,24],[12,11]]
即我想要制作其元素以相同数字开始并且具有计数>1.
您可以使用字典
from collections import defaultdict
a = [58,23,12,24,11,63,54]
d = defaultdict(list)
for num in a:
d[str(num)[0]].append(num)
res = [v for v in d.values() if len(v) > 1]
print(res)
输出:
[[58, 54], [23, 24], [12, 11]]
此代码根据第一个数字对任意数字的整数进行分组。我希望这就是你想要的。此外,这可能不是最有效的方法。
a=[58,23,12,24,11,63,54]
final=[[],[],[],[],[],[],[],[],[],[]]
for i in a:
count=0
a=i
while (i>0):
count+=1
i=i//10
final[int(a/(10**(count-1)))].append(a)
a=[]
for i in final:
if len(i)>1:
a.append(i)
print(a)
您可以使用itertools.groupby
根据您想要的任何键函数对列表进行分组:
注意Python 3.8的";海象操作员;
from itertools import groupby
a=[58,23,12,24,11,63,54]
get_first_digit = lambda n: str(n)[0]
sorted_by_digit = sorted(a, key=get_first_digit, reverse=True) # sorting is a must for groupby
result = [y for _,g in groupby(sorted_by_digit, key=get_first_digit) if len(y:=list(g))>1]
print(result)
输出:
[[58, 54], [23, 24], [12, 11]]
我有一个答案,尽管它很大。
a = [58,23,12,24,11,63,54]
s = [[a[0]]]
def firstdigit(n):
while n>=10:
n = n//10
return n
def arrange(s, i):
for j in range(len(s)):
if firstdigit(s[j][0]) == firstdigit(i):
s[j].append(i)
break
else:
m=[]
m.append(i)
s.append(m)
return s
def check(s):
for i in s:
if len(i) <= 1:
s.remove(i)
return s
for i in a[1:]:
s = arrange(s, i)
#checks for count>1
s = check(s)
print(s)
此代码只包含基本内容,没有导入任何模块。