gpt4 book ai didi

python - 将两个列表合并为一个列表,其中它们共享相同的值,并使用列表理解删除重复项

转载 作者:行者123 更新时间:2023-11-30 22:47:27 24 4
gpt4 key购买 nike

我正在尝试合并两个列表:其中一个持有平方数。其他存储五边形数字。

def pentaSquares():
l = []
n = 0
squares = lambda x: [x*x for x in range(n)]
penta = lambda y: [y*(3*y-1)//2 for y in range(n)]
while l.index < 4:
l = [i for i in squares for j in penta if squares == penta]
n = n+1
return l

我必须使用列表推导式合并这些列表,其中它们的值匹配,直到列表中有 4 个元素。

如果有人能指出我正确的方向,我将不胜感激。

我目前收到此错误:TypeError: unorderable types: builtin_function_or_method() < int()

最佳答案

使用一对生成器应该可以给你这个答案,而不会占用世界上所有的内存。对于任何结果列表大小来说,这应该都能很好地工作(尽管可能需要很长时间)。

import itertools

squares = (x*x for x in itertools.count(0))
pentas = (y * (3*y-1) // 2 for y in itertools.count(0))

results = []

cur_s, cur_p = next(squares), next(pentas)
# prime the pump

while len(results) < 4:
if cur_s == cur_p:
results.append(cur_s)
# success

# advance the generator with the smaller current result
if cur_s > cur_p:
cur_p = next(pentas)
else:
cur_s = next(squares)

没有理由为此任务使用列表推导式,但如果必须的话,您应该在 cricket_007 现已删除的答案中使用列表 -> 集合和集合交集方法

for n in range(itertools.count(0)):
squares = [x * x for x in range(n)]
pentas = [y * (3*y-1) // 2 for y in range(n)]
result = set(squares).intersection(set(pentas))
if len(result) >= 4:
break

关于python - 将两个列表合并为一个列表,其中它们共享相同的值,并使用列表理解删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40536234/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com