小白编程
亮色模式 暗色模式 跟随系统
首页 Python

如何在 Python 中使用 while 循环处理列表和字典

发布日期:

while 循环简介中,我们探讨了如何使用 while 循环来处理单个用户输入。然而,在实际应用中,经常需要记录大量的用户信息,并对这些信息进行管理和操作。为此,我们可以结合使用 while 循环与列表和字典,以便收集、存储并组织大量数据,供后续查看或进一步处理。

在列表之间移动元素

设想你有一个包含新注册但尚未验证的网站用户的列表。你的任务是验证这些用户,并将已验证的用户从待验证列表移到另一个列表中。下面是一个示例程序,演示了如何使用 while 循环来实现这一过程:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 首先,创建一个待验证用户列表和一个用于存储已验证用户的空列表
unconfirmed_users = ['alice', 'brian', 'candace']  # ❶ 创建未验证用户列表
confirmed_users = []  # 创建一个空列表用于存储已验证用户

# 验证每个用户,直到没有未验证用户为止
# 将每个经过验证的用户都移到已验证用户列表中
while unconfirmed_users:  # ❷ 当 unconfirmed_users 列表不为空时,循环继续执行
    current_user = unconfirmed_users.pop()  # ❸ 从列表末尾移除一个用户,并赋值给 current_user

    print(f"Verifying user: {current_user.title()}")  # 模拟用户验证过程
    confirmed_users.append(current_user)  # ❹ 将当前用户添加到已验证用户列表

# 显示所有的已验证用户
print("\nThe following users have been confirmed:")
for confirmed_user in confirmed_users:
    print(confirmed_user.title())

在这个例子中:

  • 我们首先创建了一个包含未验证用户的列表 unconfirmed_users(见❶),以及一个用来存储已验证用户的空列表 confirmed_users
  • 然后,使用 while 循环不断地运行(见❷),直到 unconfirmed_users 列表变为空。这个条件确保了只有当所有用户都被验证后,循环才会停止。
  • 在每次循环迭代中,使用 pop() 方法从未验证用户列表的末尾删除一个用户,并将其赋值给变量 current_user(见❸)。由于 pop() 方法是从列表末尾开始移除元素,因此 Candace 的名字会首先被处理。
  • 接着,模拟了一个用户验证过程,打印一条消息表示正在验证该用户,并将 current_user 添加到 confirmed_users 列表中(见❹)。
  • 最后,当所有用户都已验证完毕,使用一个 for 循环遍历 confirmed_users 列表,并打印出所有已验证的用户名。

输出结果如下所示:

1
2
3
4
5
6
7
8
Verifying user: Candace
Verifying user: Brian
Verifying user: Alice

The following users have been confirmed:
Candace
Brian
Alice

删除为特定值的所有列表元素

在处理列表时,有时需要删除列表中所有等于某个特定值的元素。虽然在删除列表元素中我们介绍了如何使用 remove() 方法来删除列表中的特定值,但这种方法只适用于列表中该值出现一次的情况。如果列表中包含多个相同的值,并且你希望删除所有这些值,则需要采用不同的方法。

下面是一个示例程序,展示了如何使用 while 循环来删除列表中所有值为 'cat' 的元素:

1
2
3
4
5
6
7
8
pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
print(pets)  # 打印原始列表

# 使用 while 循环删除所有值为 'cat' 的元素
while 'cat' in pets:
    pets.remove('cat')  # 每次从列表中移除一个 'cat'

print(pets)  # 打印删除后的列表

首先创建一个列表,其中包含多个值为 'cat' 的元素。打印这个列表后,Python 进入 while 循环,因为它发现 'cat' 在列表中至少出现了一次。进入这个循环后,Python 删除第一个 'cat' 并返回 while 代码行,然后发现 'cat' 还在列表中,因此再次进入循环。

它不断删除 'cat',直到在列表中不再包含这个值,然后退出循环并再次打印列表:

1
2
['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
['dog', 'dog', 'goldfish', 'rabbit']

第一次打印显示的是原始列表,包括所有的 'cat' 元素。第二次打印则显示了经过处理后的新列表,其中所有的 'cat' 都已经被成功移除。

使用用户输入填充字典

当你需要收集大量信息,并希望将这些信息与特定的输入者关联起来时,使用字典是一个非常有效的方法。下面的例子展示了一个简单的调查程序,该程序利用 while 循环提示用户输入任意多的信息,并将这些信息存储在一个字典中,以便将回答与被调查者关联起来。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
responses = {}  # 初始化一个空字典用于存储用户的回答
polling_active = True  # 设置一个标志变量,用于控制调查是否继续进行

while polling_active:
    # 提示用户输入他们的名字和他们想要攀登的山峰名称
    name = input("\nWhat is your name? ")  # ❶ 用户的名字
    response = input("Which mountain would you like to climb someday? ")  # 用户想攀登的山峰

    # 将用户的回答存储在字典中
    responses[name] = response  # ❷ 将每个用户的回答与他们的名字关联起来

    # ❸ 检查是否有其他人要参与调查
    repeat = input("Would you like to let another person respond? (yes/no) ")
    if repeat == 'no':
        polling_active = False  # 如果没有更多人参与,则停止循环

# 调查结束,显示结果
print("\n--- Poll Results ---")
for name, response in responses.items():  # ❹ 遍历字典并打印每个用户的回答
    print(f"{name} would like to climb {response}.")

程序解析:

  1. 初始化: 首先定义了一个空字典 responses 用来存储用户的回答,并设置了一个布尔标志变量 polling_activeTrue,以表示调查可以开始。
  2. while 循环: 只要 polling_active 的值为 True,Python 就会执行 while 循环中的代码。
    • 在循环内部,首先通过 input() 函数请求用户提供他们的名字(见❶)以及他们想要攀登的山峰名称。
    • 接着,使用用户提供的信息更新 responses 字典(见❷),其中键是用户名字,值是他们想要攀登的山峰名称。
  3. 检查是否还有其他参与者: 询问用户是否还有其他人愿意参加调查(见❸)。如果用户输入 'no',则将 polling_active 设置为 False,从而退出循环。
  4. 显示结果: 一旦所有用户都完成了回答,使用 for 循环遍历 responses 字典的所有项(见❹),并打印出每个用户的回答。

如果运行这个程序,并输入一些名字和回答,输出将类似于下面这样:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
What is your name? Eric
Which mountain would you like to climb someday? Denali
Would you like to let another person respond? (yes/no) yes

What is your name? Lynn
Which mountain would you like to climb someday? Devil's Thumb
Would you like to let another person respond? (yes/no) no

--- Poll Results ---
Eric would like to climb Denali.
Lynn would like to climb Devil's Thumb.

通过这种方式,你可以轻松地收集并组织来自多个用户的输入,并且能够清晰地查看每个人的回答。

相关文章