[英]How to check case insensitive strings in two lists in Python
我必須比較兩個列表,以及new_users
的字符串是否已經在現有列表中可用,然后系統應該突出顯示它。 我編寫了以下代碼並且它有效。 如果有人可以分享更好的方法來做同樣的事情,你會感激嗎?
current_users = ["john", "Cindy", "Peter", "Tesla", "Briteny"]
new_users = ["JOHN", "Cindy", "Nomy", "Tesla", "Tina"]
i = 0
for new_user in new_users:
if new_user.lower() == current_users [i].lower():
print ("The user name is already taken")
else:
print ("The user name is available")
i += 1
有一種更好的 Pythonic 方法來獲取可用的用戶名列表:
availableUsers = list(set([x.lower() for x in current_users])-set([y.lower() for y in new_users]))
len(availableUsers)
不可用的:
unavailableUsers = list(set([x.lower() for x in new_users])&set([y.lower() for y in current_users]))
您可以簡單地將lists
轉換為sets
因為將它們進行比較也很容易找到intersection
、 symmetric difference
、 difference
、 union
等。
current_users = ["john", "Cindy", "Peter", "Tesla", "Briteny"]
new_users = ["JOHN", "Cindy", "Nomy", "Tesla", "Tina"]
available_users = list(set(map(lambda x: x.lower(), current_users)) - set(map(lambda x: x.lower(), new_users)))
taken_users = list(set(map(lambda x: x.lower(), current_users)) & set(map(lambda x: x.lower(), new_users)))
print(available_users)
print(taken_users)
for i in taken_users:
print(f'username {i} is already taken')
or
for i in available_users:
print(f'username {i} is available')
username cindy is already taken
username tesla is already taken
username john is already taken
...
這是對您的代碼的簡單采用,它只是使用所有現有用戶的集合來檢查新用戶是否已經存在。 另外,我在打印中添加了用戶名。
current_users = ["john", "Cindy", "Peter", "Tesla", "Briteny"]
new_users = ["JOHN", "Cindy", "Nomy", "Tesla", "Tina"]
current_users_prepared = {user.lower() for user in current_users}
for new_user in new_users:
if new_user.lower() in current_users_prepared:
print ("The user name '{}' is already taken".format(new_user))
else:
print ("The user name '{}' is available".format(new_user))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.