首页 > 解决方案 > 如何用 2D 列表替换此方法?

问题描述

我正在制作一个简单的投票系统(我的第一个项目),我使用了一种非常原始的方法,即在 2 个不同的列表中使用相同的索引来链接 2 个对象。前任。我有一个名为 (names) 的列表,其中存储了选举中候选人的姓名,然后我制作了另一个名为 (votes) 的列表来存储每个候选人的选票,并且我匹配了索引,以便索引为 1 的候选人的选票列表中的 (names) 存储在另一个列表 (votes) 中的相同索引 (1) 中。我考虑过使用字典,但 2D 似乎更好。

标签: pythonlistnested-lists

解决方案


2D 列表只是列表列表。您可以为您的投票系统创建一个并向其添加投票,如下所示。二维voting_system列表是由称为列表理解的东西创建的。我将所涉及的数据放入变量中,以使流程更加“数据驱动”并且更容易更改。

from pprint import pprint

Candidate_A, Candidate_B, Candidate_C = 'George', 'Kamala', 'Michele'
candidates = Candidate_A, Candidate_B, Candidate_C

print('Using a 2D list:')
voting_system = [[name, 0] for name in candidates]  # Create 2D list.
pprint(voting_system)  # Show initial values.

voting_system[candidates.index(Candidate_B)][1] += 1  # Add a vote for Candidate_B.
pprint(voting_system)  # Show updated values.

输出:

Using a 2D list:
[['George', 0], ['Kamala', 0], ['Michele', 0]]
[['George', 0], ['Kamala', 1], ['Michele', 0]]```

更新 - 使用字典

你从来没有说过为什么你认为使用 2D 列表似乎比字典更好——我认为你应该重新考虑,因为它有一些优势。最重要的是,您无需显式查找候选人的索引来更新他们的投票数,这平均需要检查列表中所有候选人的一半。无论涉及多少候选人,在字典中查找都是一样的,非常快的速度。我还认为语法更简单易读。

以下是使用字典的方法:

from pprint import pprint

Candidate_A, Candidate_B, Candidate_C = 'George', 'Kamala', 'Michele'
candidates = Candidate_A, Candidate_B, Candidate_C

print('Using a dictionary:')
voting_system = dict.fromkeys(candidates, 0)
pprint(voting_system)  # Show initial values.

voting_system[Candidate_B] += 1  # Add a vote for Candidate_B.
pprint(voting_system)  # Show initial values.

输出:

Using a dictionary:
{'George': 0, 'Kamala': 0, 'Michele': 0}
{'George': 0, 'Kamala': 1, 'Michele': 0}

推荐阅读