Python 从列表中查找公用编号并将其放置在另一个列表中
我有两个列表,它们是通过一个名为factors的函数形成的,该函数返回一个数字的素数因子。在我的任务中,我必须将两个列表中的公共数字返回到一个新列表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:
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]