我在 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