1、自然数10以下的能被3或者5整除的有3,5,9,那么这些数字的和是23,求能被3或者5整除的1000以内数字的和
>>> print(sum([i for i in range(1,1000) if i%3==0 or i%5==0]))
233168
或者用reduce
>>> from functools import reduce
>>> print(reduce(lambda x,y:x+y, [i for i in range(1,1000) if i%3==0 or i%5==0]))
233168
2、在一个数组指定数组中移除指定数字,并返回新的住宿并从大到小排列,比如:nums=[1,6,6,3,6,2,10,2,100],remove_num=6,要求返回时 nums = [100,10,3,2,2,1]
>>> nums = [1, 6, 6, 3, 6, 2, 10, 2, 100]
>>> newnums = list(filter(lambda x:x!=6, nums))
>>> print(sorted(newnums,reverse=True))
[100, 10, 3, 2, 2, 1]
用内置的filter函数,速度快
3、从排序好的任意数组列表里面删除重复元素(你不知道列表里面有多少重复的元素),比如:nums=[1,3,3,5,5,8,10,10,100,100] ,处理完之后是 : [1,3,5,8,10,100]
>>> nums = [1, 3, 3, 5, 5, 8, 10, 10, 100, 100]
>>> print(sorted(set(nums)))
[1, 3, 5, 8, 10, 100]
使用set集合不重复的特性,将重复的元素删除,再通过sorted排序
4、从排序好的数组里面,删除重复的元素,重复的数字最多只能出现2次,比如:nums =[1,1,1,1,1,2,2,2,5] 要求返回 nums=[1,1,2,2,5]
from collections import Counter
if __name__=='__main__':
def quest4(nums = [1, 1, 1, 1, 1, 2, 2, 2, 5], count=2):
newnums = []
print(Counter(nums))
for k,v in Counter(nums).items():
if v>count:
for i in range(count):
newnums.append(k)
else:
for i in range(v):
newnums.append(k)
print(nums)
print(newnums)
quest4()
Counter({1: 5, 2: 3, 5: 1})
[1, 1, 1, 1, 1, 2, 2, 2, 5]
[1, 1, 2, 2, 5]
collections是Python内建的一个集合模块,Counter
是一个简单的计数器,例如,统计字符出现的个数
5、给定一个字符串,寻找没有字符串重复的最长的字符串,比如"bbbbb" 找到的是"b",长度为1; "abcabwbbd" ,找到的"cabw"
if __name__=='__main__':
s1 = "abcabwbbd"
def max_unique_str(s1=""):
for i in range(len(s1)):
contain = []
contain.append(s1[i])
for j in range(i+1,len(s1)):
if s1[j] in contain:
yield contain
break
else:
contain.append(s1[j])
result = sorted([''.join(x) for x in max_unique_str(s1)], key=lambda x: len(x), reverse=True)[0]
print('str:{}, len:{}'.format(result,len(result)))
str:cabw, len:4
6、有一串长的字符串 names="LI XIA ,ZHAO MING ,LAO WANG *,DA XIONG >,LI MEI MEI,CHANG JIANG,LI QIANG,ZHANG WU JI,ZHANG SAN FENG,DU GU QIU BAI,QIAO FENG"
要求:1)过滤出所有的名字,去掉每个名字的左右空格和乱码,每个名字的首字母大写,比如 'LAO WANG *',处理成'Lao wang';
2)统计出所有名字里面名字最长的;
3)统计出姓的人的名单;
from pprint import pprint
if __name__=='__main__':
names = "LI XIA ,ZHAO MING ,LAO WANG *,DA XIONG >,LI MEI MEI,CHANG JIANG,LI QIANG,ZHANG WU JI,ZHANG SAN FENG,DU GU QIU BAI,QIAO FENG"
def checkName(names):
newnames = [name.title().strip(' *>') for name in names.split(',')]
names_dict = {name:len(name) for name in newnames}
result = sorted(names_dict.items(), key=lambda x:x[1], reverse=True)
pprint(result)
# print("名字最长的人:{}".format(result[0]))
# pprint(sorted(names_dict.items(), key=lambda x:x[0].split(' ')[0]))
checkName(names)
result:
[('Zhang San Feng', 14),
('Du Gu Qiu Bai', 13),
('Chang Jiang', 11),
('Zhang Wu Ji', 11),
('Li Mei Mei', 10),
('Zhao Ming', 9),
('Qiao Feng', 9),
('Lao Wang', 8),
('Da Xiong', 8),
('Li Qiang', 8),
('Li Xia', 6)]