如何解决从列表中找到一个公共数字并将其放入另一个列表中
我有两个列表,它们是通过一个名为 factors 的函数形成的,该函数返回一个数字的质因数。在我的任务中,我必须将两个列表中的公共数字返回到一个新列表中。
def factors(n):
i = 2
prime_factors = []
while i*i <= n:
if n%i == 0:
prime_factors=prime_factors + [i]
n //= i
else:
i += 1
if n>1:
prime_factors=prime_factors + [n]
return prime_factors
>>>factors(4)
>>>[2,2]
>>>factors(14)
>>>[2,7]
我必须找到通用号码并将其返回到一个新列表中。我在下面尝试了我的代码,它给我的结果列表是 [2,2],而它应该只是 [2]
lst=[]
for element in factors(4):
if element in factors(14):
lst=lst+[element]
这段代码给我的结果是 [2,2]。请指导我如何才能获得 [2]。此外,我不允许使用 set、intersection 或 zip 等方法或数学库中的内容。另一个例子:
lst1=[2,2,3,4,5,6]
lst2=[2,7,8]
common_lst=[2,4]
解决方法
(注意:这是针对该问题的早期版本,在他们破坏问题以说不允许使用数学“库”并且他们想要保留常见重复项之前。哦,好吧,onEdit
是一个简短的单行,我们可以自己写。)
200
或
gcd
(它们并不完全相同,它们解决了对模棱两可问题的两种不同解释。我实际上怀疑第一个是所需的,否则 OP 可能不会使 >>> from math import gcd
>>> factors(gcd(4,14))
[2]
函数产生重复因子首先。)
Counter
库中的 collections
方法在这里会派上用场。 Counter
接受一个列表并返回该列表中每个值的“计数”数量的字典。
from collections import Counter
f4 = factors(4)
f14 = factors(14)
c4 = Counter(f4)
c14 = Counter(f14)
inter = c4 & c14
lst = list(inter.elements())
inter
表示两个字典之间的交集。 list(inter.elements())
简单地检索字典中的元素作为键和值的组合,并将结果转换为列表。
如果我正确理解了这个问题,解决它的唯一方法是删除找到的常用数字。 (为此,我遍历了列表 backwords 以防止索引错误)
lst = []
fctrs_1 = factors(4)
fctrs_2 = factors(14)
for a in range(len(fctrs_1)-1,-1,-1):
for b in range(len(fctrs_2)-1,-1):
if fctrs_1[a] == fctrs_2[b]:
lst.append(fctrs_1[a])
del fctrs_1[a]
del fctrs_2[b]
break # Break to prevent errors
print(lst)# Output: [2]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。