Skip to main content
 首页 » 编程设计

python之给定 Python 中的列表列表,返回最大长度的唯一值子列表

2025年05月04日14sxdcgaq8080

我在 Python 中有以下列表:

l = [[2], [3], [2, 2], [5], [2], [3], [7], [2, 2, 2], [3, 3], [2], [5], [11], [2, 2], [3], [13], [2], [7], [3], [5], [2, 2, 2, 2], [17], [2], [3, 3], [19], [2, 2], [5]] 

我想编写一个函数来返回最大长度的唯一值子列表。在这种情况下,该函数将返回:

l = [[5], [7], [3, 3], [11], [13], [2, 2, 2, 2], [17], [19]] 

我仍然是 python 的初学者,但是我对如何编写这样的函数知之甚少。我得到的最深入的结果是我可以通过使用嵌套循环来迭代子列表。但从我对 Python 的了解来看,似乎必须有一些比使用循环更简单的方法来返回我正在寻找的列表。

更新:

以下是我使用代码所做的事情:解决项目 euler #5,非暴力方式!

我确信这段代码可以重构,但无论如何。

谢谢你们的帮助,伙计们。 itemgetter 正是我所需要的。

#!/usr/bin/python 
# coding = UTF-8 
 
import argparse, sys, math 
from itertools import groupby 
from collections import defaultdict 
from operator import itemgetter 
 
parser = argparse.ArgumentParser() 
parser.add_argument('filename', nargs='?') 
args = parser.parse_args() 
if args: 
   intinput = int(sys.argv[1]) 
elif not sys.stdin.isatty(): 
    intinput = int(sys.stdin.read()) 
else: 
    parser.print_help() 
 
def prime_factorize(n): 
    factors = [] 
    number = math.fabs(n) 
 
    while number > 1: 
        factor = get_next_prime_factor(number) 
        factors.append(factor) 
        number /= factor 
 
    if n < -1:  
        factors[0] = -factors[0] 
 
    return factors 
 
def get_next_prime_factor(n): 
    if n % 2 == 0: 
        return 2 
 
    for x in range(3, int(math.ceil(math.sqrt(n)) + 1), 2): 
        if n % x == 0: 
            return x 
 
    return int(n) 
 
 
def mkfactors(n): 
  tpf = [] 
  for i in range(n+1): 
    tpf.extend(prime_factorize(i)) 
  return tpf 
 
l = [list(g) for k,g in groupby(mkfactors(intinput))] 
 
m = [max(g) for _,g in groupby(sorted(l,key=itemgetter(0)),key=itemgetter(0))] 
 
 
prod = 1 
 
for list in m: 
  for element in list: 
    prod *= element 
 
print prod 

请您参考如下方法:

如果你知道每个子列表都有相同的元素,你可以这样做:

l = [[2], [3], [2, 2], [5], [2], [3], [7], [2, 2, 2], [3, 3], [2], [5], [11], [2, 2], [3], [13], [2], [7], [3], [5], [2, 2, 2, 2], [17], [2], [3, 3], [19], [2, 2], [5]] 
 
from collections import defaultdict 
 
my_dict = defaultdict(list) 
 
for ele in l: 
    if len(my_dict[ele[0]]) < len(ele): 
        my_dict[ele[0]] = ele 

结果:

>>> my_dict.values() 
[[2, 2, 2, 2], [3, 3], [5], [7], [11], [13], [17], [19]]