Python 从列表中查找公用编号并将其放置在另一个列表中

Python 从列表中查找公用编号并将其放置在另一个列表中,python,python-3.x,list,python-requests,Python,Python 3.x,List,Python Requests,我有两个列表,它们是通过一个名为factors的函数形成的,该函数返回一个数字的素数因子。在我的任务中,我必须将两个列表中的公共数字返回到一个新列表 def factors(n): i = 2 prime_factors = [] while i*i <= n: if n%i == 0: prime_factors=prime_factors + [i] n //= i else:

我有两个列表,它们是通过一个名为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]。另外,我不允许使用set、intersection、zip等方法,也不允许使用数学库中的东西。另一个例子:

lst1=[2,2,3,3,4,5,6]
lst2=[2,2,3,4,4,7,8]

common_lst=[2,2,3,4]

如果我理解正确,解决这个问题的唯一方法就是删除找到的常用数字。(为了做到这一点,我反复浏览了列表的背景词,以防止索引错误)

(注意:这是针对问题的早期版本,在他们故意破坏问题之前,他们说数学“库”是不允许的,他们想保留常见的副本。哦,
gcd
是一个简短的一行代码,我们可以自己编写。)


(它们不是完全等价的,它们解决了模糊问题的两种不同解释。我实际上怀疑第一种解释是理想的解释,否则OP可能不会让
factors
函数首先产生重复的因子。)来自
集合
库的
计数器
方法将在这里派上用场<代码>计数器接收列表并返回该列表中每个值的“计数”数的字典

从集合导入计数器
f4=系数(4)
f14=系数(14)
c4=计数器(f4)
c14=计数器(f14)
内部=c4和c14
lst=列表(inter.elements())

inter
表示两个词典之间的交叉点<代码>列表(inter.elements())只需将字典中的元素作为键和值的组合检索,并将结果转换为列表。

如果需要,使用set并将其转换为末尾的列表。使用
lst=[]
而不是
lst=set()
lst.add(element)
也许
if-element in factors(14)和element not in lst:
?如果有其他方法,我不能使用set(),你会继续破坏你的问题并使答案无效吗?4、6和8如何进入列表?它们不是素数。
lst1=[2,2,3,3,4,5,6]
lst2=[2,2,3,4,4,7,8]

common_lst=[2,2,3,4]
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, -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]
>>> from math import gcd
>>> factors(gcd(4, 14))
[2]
>>> [*{*factors(4)} & {*factors(14)}]
[2]