第1001次python入门——Day04~Day05代码练习

练习

# 有一个列表names, 保存了一组姓名names = ['zhangsan','lisi','wangwu','jerry']
# 用户输入一个姓名,如果存在,提示用户姓名已存在;
# 如果不存在,就将这个姓名添加到列表里;

names = ['zhangsan', 'lisi', 'wangwu', 'jerry']
str1 = input('请输入姓名:')
# if str1 in names:
#     print('用户姓名已存在')
# else:
#     names.append(str1)
# print(names)

for name in names:
    if str1 == name:
        print('用户姓名已存在')
        break
else:
    names.append(str1)

print(names)
# 冒泡完善

# 统计列表里出现次数最多的元素

# 求列表里的最大数

# 删除列表里面的空字符串

冒泡排序的优化

nums = [6, 5, 3, 1, 8, 7, 2, 4]
count = 0
j = 0
# 第一趟比较时,j = 0,多比较了0次
# 第二趟比较时,j = 1,多比较了1次
# 第三趟比较时,j = 2,多比较了2次
# ......
# 所以优化每趟的比较次数j

while j < len(nums) - 1:
    # 在每趟里都定义一个flag
    flag = True  # 假设每一趟都没有换行
    i = 0
    while i < len(nums) - 1 - j:
        count += 1
        if nums[i] > nums[i + 1]:
            flag = False  # 只要交换了,假设就不成立
            nums[i], nums[i + 1] = nums[i + 1], nums[i]
        i += 1
    if flag:
        # 走完还是True,就说明没有交换过数据
        break
    j += 1
print(nums)
print('一共跑了{}趟'.format(count))

求列表的最大数及其下标

nums = [3, 1, 9, 8, 2, 4, 0, 7, 5]
nums.sort(reverse=True)
print(nums[0])


nums1 = [3, 1, 9, 8, 2, 4, 0, 7, 5]
n = max(nums1)
print(n)


nums2 = [3, 1, 9, 8, 2, 4, 0, 7, 5]
a = nums2[0]
# print(len(nums2))
for num in nums2:
    if num > a:
        a = num
b = nums2.index(a)
print('发现的最大数是%d,下标是%d' % (a, b))

移除空字符串

# 删除列表里面的空字符串
x = ['hello', 'good', '', '', 'yes', 'ok', '']
# x = ['hello', 'good', 'yes', 'ok']

#方法一:不可行
# 在使用for...in循环遍历时,尽量不要进行增删操作
# for word in x:
#     if word == '':
#         x.remove(word)
# print(x)

#方法二
# i = 0
# while i < len(x):
#     if x[i] == '':
#         x.remove(x[i])
#         i -= 1
#     i += 1
# print(x)  #['hello', 'good', 'yes', 'ok']

# 方法3
x2 = []
for word in x:
    if word != '':
        x2.append(word)
x = x2
print(x)

列表的嵌套

import random
#nums = [1, 2, [100, 200, 300], 3, 4, 5]  # 多维数组
# 一个学校,有三个办公室,8个老师等待分配工位,编程随机解决
teachers = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
rooms = [[], [], []]

for teacher in teachers:
    room = random.choice(rooms)  #从列表中随机选择一个数据
    room.append(teacher)

print(rooms)
# 第0个房间有几个人,分别是...


# 注意:带下标一般使用while,for循环也可以带下标
for i, room in enumerate(rooms):
    print('房间%s里一共有%d个老师,分别是:' % (i, len(room)), end=' ')
    for teacher in room:
        print(teacher,end='  ')
    print()

列表推导式

# 列表推导式作用是使用简单的语法创建一个列表

nums = [i for i in range(10)]
print(nums)

x = [i for i in range(10) if i % 2 == 0]
print(x)  #[0, 2, 4, 6, 8]

y = [i for i in range(10) if i % 2]
print(y)  #[1, 3, 5, 7, 9]

points = [(p, q) for p in range(5, 9) for q in range(10, 20)]
print(points)

列表推导式的练习

# 写一段代码实现 分组一个list里面的元素,比如[1, 2, 3, ...100]变成[[1, 2, 3],[4, 5, 6]...]

m = [i for i in range(1, 101)]
n = [m[j:j + 3] for j in range(0, 100, 3)]
print(n)

深拷贝和浅拷贝

import copy

# 浅拷贝,相当于只拷贝一层,如果有再多层,就是指向而不是拷贝成不同对象
nums = [1, 2, 3, 4, 5]
nums1 = nums   # 不是浅拷贝也不是深拷贝,只是一个指向,是赋值

nums2 = nums.copy()  # 浅拷贝,两个内容一模一样,但是是不同的对象

nums3 = copy.copy(nums)  # 和nums.copy()功能一样,都是浅拷贝

# 深拷贝,只能用copy模块实现
words = ['hello', 'good', [100, 200, 300], 'yes', 'hi', 'ok']
print(words)

# word1是浅拷贝
words1 = words.copy()
words[0] = '你好'
print(words1)

words[2][0] = 1
print(words1)

# 深拷贝
words3 = copy.deepcopy(words)
words[2][0] = 6
print(words3)

猜你喜欢

转载自blog.csdn.net/Thorne_lu/article/details/114275765