每日技术python学习日志

Python入门必刷题目

2018-12-28  本文已影响0人  叫我小包总

最近一直在自学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的倍数的和(交集)。

defsum_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]。

defquestion4(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小白,自己才疏学浅,很多地方不懂,如果有写的不到位的地方,欢迎小伙伴们拍砖。

上一篇下一篇

猜你喜欢

热点阅读