最近一直在自学python,刚学习完基础知识,但一看到题目,就两眼一抹黑,实在是怀疑自己有没有学过python。向一些python大神请教,给的建议都是要多接触项目,在项目中学习。下面我就把自己在leetcode上做的一些简单但又不错的题目分享给大家,希望入门的小伙伴们刷一下,大神自动忽略哈。
1.能被3或5整除的1000以内的数字和。
方法一:
sum = 0
for i in range(1,1000):
if i % 3== 0 or i % 5 == 0:
sum = sum + i
print(sum)
这个方法代码简单,也很容易理解,但是运行的效率低。虽然自己是一个小白,但也要有一颗成为大神的心,经过自己各种尝试,于是有了第二种方法。
方法二:
在1-1000中,3的倍数最小的是3,最大的是999。5的倍数最小的是5,最大的是995。3和5的倍数其中肯定有交集,而他们肯定是15的倍数,那么,15的倍数最小的是15,最大的是990。所以,我们要的答案应该是:3的倍数和+5的倍数和-15的倍数的和(交集)。
def sum_mod(min,max):
return(max/min)*(min+max)/2
print(sum_mod(3,999)+sum_mod(5,995)-sum_mod(15,990))
2.在一个数组里面移除指定的数字,并返回一个从大到小排序的新数组。比如:nums=[1,6,6,3,6,2,10,2,100],remove_num=6,要求返回时nums=[1,2,3,10,100]。
方法一:
nums = [1,6,6,3,6,2,10,2,100]
while 6 in nums:
nums.remove(6)
print(nums)
在这里我们用到了while循环。因为要删除的值在列表中出现多次,就需要使用循环来判断是否删除了所有这样的值。
方法二:
>>> nums = [1, 6, 6, 3, 6, 2, 10, 2, 100]
>>> newnums = list(filter(lambda x:x!=6, nums))
>>> print(sorted(newnums,reverse=True))
该方法中用到了python内置函数filter(),它主要用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用list()来转换。
函数filter()的语法是:filter(function,iterable),function——判断函数;iterable——可迭代对象。
此外,这种方法中还用到了lambda()函数。Lambda表示匿名函数,冒号前面的x表示函数参数匿名函数有限制,只能有一个表达式,不用写return,返回值就是该表达式的结果。
方法还使用了sorted()对列表进行临时排序。函数sorted()能够按特定顺序显示列表,同时不影响它们在列表中的原始排列顺序。但需要注意的是,调用函数sorted()后,列表元素排列顺序并没有变。如果要与字母相反顺序显示列表,可向函数sorted()传递参数reverse=True。
3.从排序好的任意组列表里面删除重复元素(你不知道列表里面有多少个重复的元素)。比如:nums=[1,3,3,5,5,8,10,10,100],处理完之后是[1,3,5,8,10,100]。
nums = [1,3,3,5,5,8,10,10,100,100]
print(sorted(set(nums)))
答案中用到set()函数。Set()函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。函数的语法是:set([iterable]),iterable——可迭代的对象,该函数会返回一个新的集合对象。
4.从排序的数组里面,删除重复的元素。重复的数字最多只能出现2次。nums=[1,1,1,2,2,3],要求返回nums=[1,1,2,2,3]。
def question4(nums=[1,1,1,2,2,3]):
from collections import Counter
print(Counter(nums))
for k,v in Counter(nums).items():
if v > 2:
nums.remove(k)
print(nums)
question4(nums=[1,1,1,2,2,3])
上述方法用到了python标准库——collections模块的Counter类。
collections模块自python2.4版本开始被引入,包含了dict、set、list、tuple以外的一些特殊的容器类型。
Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形成存储,其中元素作为key,其计数作为vaule。计数值可以是任意的Interger(包括0和负数)。
通过实战来提高自己的功力,我觉得是一个很好的方法,但是不要贪多方面突破。要从一个点突破,以战养练,以练养战。我也是一个python小白,自己才疏学浅,很多地方不懂,如果有写的不到位的地方,欢迎小伙伴们拍砖。