加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

使用python,如何合并或连接两个列表,以便它们的值不重叠?

发布时间:2020-12-20 12:19:16 所属栏目:Python 来源:网络整理
导读:首先,我为我不准确的词汇道歉.我是一个绝对的零开始.无论如何,我试图解决这个问题: http://projecteuler.net/problem=1 简而言之,我正在尝试编写一个脚本,它将找到低于1000的3或5的所有倍数的总和. 我的(非常基本的)方法是使用这个程序: ##Multiples of 3x
首先,我为我不准确的词汇道歉.我是一个绝对的零开始.无论如何,我试图解决这个问题:
http://projecteuler.net/problem=1

简而言之,我正在尝试编写一个脚本,它将找到低于1000的3或5的所有倍数的总和.

我的(非常基本的)方法是使用这个程序:

##Multiples of 3
x = range(3,1000,3)

##Multiples of 5
y = range(5,5)

a = sum(x)
b = sum(y)
n = a + b

print n

我意识到这是错误的,因为有15个数字被包含两次(它是5和3的倍数).
那么有没有办法解决这个问题,还是我从一个完全错误的角度来解决这个问题?
或者在尝试解决此问题之前,我是否需要更多地学习?
如果在之前的帖子中已经解释过这个问题,我也很抱歉,但我看了一下.

解决方法

它被称为包含排除原则,所以你可以这样做

##Multiples of 3
x = range(3,5)

##multiple of 15 are counted twice
z=range(15,15)


a = sum(x)
b = sum(y)
c = sum(z)
n = a + b -c
print(n)

但美在于使用发电机或列表理解

a = sum(i for i in range(1000) if i%3 == 0 or i%5 == 0 )
print(a)

其中%是modulo并且是整数偏差的余数.
关于这一点的好处是代码读得如此流畅,并且是规则的直接翻译,可以从左到右阅读.

在这种情况下,两种算法运行时间取决于n是1000.如果n将是例如1000000000,则必须等待很长时间才能完成.如果你应用小数学,你可以找到它

sum(a for a in range(a1,a2,n))

实际上是arithmetic progression,无论n多大,都可以在恒定时间内计算出总数. http://en.wikipedia.org/wiki/Project_Euler#Example_problem_and_solutions

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读