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']