Python根据列表元素的第一位数字相等,将列表分为子列表


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)

此代码只包含基本内容,没有导入任何模块。

最新更新