ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-07-15 18:55:27  阅读:184  来源: 互联网

标签:python range list


首先,我为我不准确的词汇道歉.我是一个绝对的零开始.无论如何,我试图解决这个问题:
http://projecteuler.net/problem=1

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

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

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

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

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

print n

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

解决方法:

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

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

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

##multiple of 15 are counted twice
z=range(15,1000,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

标签:python,range,list
来源: https://codeday.me/bug/20190715/1470479.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有