python学习(9)

习题1:找到列表中第二大的数,可以用多种方法解决。

思路1:
找到最大的,删除掉,再找最大的

list2 = [2,3,4,5,6,7]
max_number = max(list2)
list2.remove(max_number)
#list2.remove(max(list2))
print("第二大的数:",max(list2))

思路2:
排好序找倒数第二个

list2 = [2,3,4,5,6,7]

print("第二大的数:",sorted(list2)[-2])

思路3:
遍历,声明两个变量,一个存最大的
一个存第二大的,然后逐一比对。

list2 = [2,3,4,5,6,7]

max_number = list2[0]
second_max_number = list2[0]

for n in list2:
    if n > max_number:
        second_max_number = max_number
        max_number = n

print("第二大的数:",second_max_number)

习题2:python代码得到2个列表的交集与差集 不许用set
交集思路:遍历list1,判断是否在list2中,在的话,则存入一个列表中。
差集思路:分别遍历list1和2,如果不在对方的list中,则存入一个列表中

list1 = [1,2,3,4]
list2 = [2,3,4,5,6,7]

in_list = []

u_list = []

for v in list1:
    if v in list2:
        in_list.append(v)

    elif v not in list2:
        u_list.append(v)

print("交集: ",in_list)
print("差集:",u_list)

差集2的实现方法:集合本身减去交集

list1 = [1,2,3,4]
list2 = [2,3,4,5,6,7]

in_list = []

diff_list = []

#union_list = list(set(list1 + list2))

for n in list1:
    if n in list2:
        in_list.append(n)

for n in list1:
    if n not in in_list:
        diff_list.append(n)
print("差集",diff_list)

冒泡排序:

l = [2,-2,3,4,5,6,7]

for i in range(len(l)):
    for j in range(len(l)-1-i):
        if l[j] > l[j+1]:
            temp = l[j]
            l[j] = l[j+1]
            l[j+1] = temp
print(l)

算法:

s = [-1,1,-2,2,3,-3]

找最大元素放到最后

第一步:交换2个元素

交换的方法1:
a,b = b,a

交换2:
temp=b
b=a
a=temp

第二步:我要找到这个list中最大的元素,把它放到列表的最后位置

位置0和位置1比,如果大,交换,否则不换
位置1和位置2位置比,如果大,交换,否则不换
位置2和位置3位置比,如果大,交换,否则不换
...
位置4和和位置5位置比,如果大,交换,否则不换

1)基于坐标做遍历,最后一个元素不需要做遍历动作

   1 把元素逐一取出来
   2 基于坐标位置逐一取出来,i,i+1

2)使用if当前元素和后一个元素做比对,如果大了,交换,否则啥也不干

找其他最大元素

把最后1个元素我不处理了,把之前的所有数,在做相同工作,第二大

把最后2个元素我不处理了,把之前的所有数,在做相同工作,第三大
把最后3个元素我不处理了,把之前的所有数,在做相同工作,第四大
.....
把最后n-1个元素我不处理了,把之前的所有数,在做相同工作,第n大

查看内置函数

>> dir(builtins)

习题3:求一个字符串中的字母个数函数需判断传入参数的类型。必须使用ascii来判断是否字母

s = "abcddz122"
def letter_number(s):
    """ 统计一个字符串中字母的个数"""
    count_letter = 0
    if not isinstance(s,str):
        print("参数错误,请重新输入.")
        return -1
    else:
        for c in s:
            #(ord(c)>=ord("a") and ord(c) <=ord("z") )or (ord(c) >= ord("A") and ord(c) <= ord("Z"))
            if (ord(c)>=97 and ord(c) <=122 )or (ord(c) >= 65 and ord(c) <= 90):
                count_letter += 1
    return count_letter

print(letter_number(s))
print(letter_number(222))

猜你喜欢

转载自blog.51cto.com/13496943/2175891
今日推荐