Python两个列表元素的对比经常遇到,如何正确的比较?
知识点:列表解析。
详解:
列表解析 List Comprehensions
表达式:[expression for iter_val in iterable if cond_expr]
- [expression]:最后执行的结果
- [for iter_val in iterable]:这个可以是一个多层循环
- [if cond_expr]:两个for间是不能有判断语句的,判断语句只能在最后;顺序不定,默认是左到右。
代码操作:
current_names = ["java","go","selenium","appium","python"]
new_users = ["java","go","javascript","HTTP","C++"]
current_names = [current_name.lower() for current_name in current_names]
new_users = [new_user.lower() for new_user in new_users]
for new_user in new_users:
if new_user in current_names:
print(new_user + " 用户名已被使用")
else:
print(new_user + " 用户名可以使用")
运行结果:
java 用户名已被使用
go 用户名已被使用
javascript 用户名可以使用
http 用户名可以使用
c++ 用户名可以使用
拓展练习:
设置微博名时,常会遇到"用户名已被占用"情况,那么如何使用Python进行简单的实现?
设计思路:
1、设置一个列表,用于存储全网用户名称(新名称则添加、替换名称则自动删除)
2、用户提交名称时,列表进行一次查询,查看是否有重复,并做相关提示
3、不区分大小写,即:PYTHON/Python/python/pYTHOn....默认是一个名字,提交会提醒重复。
代码如下:
1 """
2
3 current_names = ["solo", "James", "echo", "JOY", "Tump", "AOBAMA", "新浪新闻", "新浪NEWS",
4 "新浪NBA", "ChinaNEWS"] # 随意列举几个
5
6 Num_Time = 0 #定义编辑次数,大于3次则退出
7
8 while Num_Time <= 3:
9
10 user_name = input("Please input your name:")
11 user_name = user_name.lower()
12 new_users = []
13 new_users.append(user_name)
14
15 current_names = [current_name.lower() for current_name in current_names] # 列表解析
16 new_users = [new_user.lower() for new_user in new_users]
17
18 if user_name in current_names:
19 print(user_name + "用户名称已被占用,请重试。")
20 Num_Time += 1
21
22 else:
23 print(user_name + "用户名可以使用,请提交。")
24 current_names.append(user_name)
25 print("当前用户名为:" + user_name)
26 print("用户名称列表: " + str(current_names))
27 break
运行结果:
Please input your name:solo
solo用户名称已被占用,请重试。
Please input your name:nbs
nbs用户名可以使用,请提交。
当前用户名为:nbs
用户名称列表: ['solo', 'james', 'echo', 'joy', 'tump', 'aobama', '新浪新闻', '新浪news', '新浪nba', 'chinanews', 'nbs']
Process finished with exit code 0
1、如果修改不成功,不计入累积次数
2、如果修改成功,限制次数为3次
3、打印出目前列表
代码:
1 current_names = ["solo", "James", "echo", "JOY", "Tump", "AOBAMA", "新浪新闻", "新浪NEWS",
2 "新浪NBA", "ChinaNEWS"] # 随意列举几个
3
4 Num_Time = 0 #定义编辑次数,大于3次则退出
5
6 while Num_Time <= 3:
7
8 user_name = input("Please input your name:")
9 user_name = user_name.lower()
10 new_users = []
11 new_users.append(user_name)
12
13 current_names = [current_name.lower() for current_name in current_names] # 列表解析
14 new_users = [new_user.lower() for new_user in new_users]
15
16 if user_name in current_names:
17 print(user_name + "用户名称已被占用,请重试。")
18 # Num_Time += 1 #如果是修改不成功,那么不算修改次数,直接不要累计就行了
19
20 else:
21 print(user_name + "用户名可以使用,请提交。")
22 current_names.append(user_name)
23 print("当前用户名为:" + user_name)
24 Num_Time += 1
25 # break
26 if Num_Time >=3:
27 print("每人一年内只能修改3次!")#3次是针对成功修改的操作
28 break
29
30 print("用户名称列表: " + str(current_names))
打印结果:
1、如果多次输入错误,不会对累积用影响。
2、成功修改三次后,跳出程序
3、打印出当前列表元素
1 Please input your name:solo
2 solo用户名称已被占用,请重试。
3 Please input your name:solo
4 solo用户名称已被占用,请重试。
5 Please input your name:solo
6 solo用户名称已被占用,请重试。
7 Please input your name:solo
8 solo用户名称已被占用,请重试。
9 Please input your name:ka
10 ka用户名可以使用,请提交。
11 当前用户名为:ka
12 Please input your name:la
13 la用户名可以使用,请提交。
14 当前用户名为:la
15 Please input your name:ji
16 ji用户名可以使用,请提交。
17 当前用户名为:ji
18 每人一年内只能修改3次!
19 用户名称列表: ['solo', 'james', 'echo', 'joy', 'tump', 'aobama', '新浪新闻', '新浪news', '新浪nba', 'chinanews', 'ka', 'la', 'ji']