python - 如何用 2D 列表替换此方法?
问题描述
我正在制作一个简单的投票系统(我的第一个项目),我使用了一种非常原始的方法,即在 2 个不同的列表中使用相同的索引来链接 2 个对象。前任。我有一个名为 (names) 的列表,其中存储了选举中候选人的姓名,然后我制作了另一个名为 (votes) 的列表来存储每个候选人的选票,并且我匹配了索引,以便索引为 1 的候选人的选票列表中的 (names) 存储在另一个列表 (votes) 中的相同索引 (1) 中。我考虑过使用字典,但 2D 似乎更好。
解决方案
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}
推荐阅读
- node.js - 猫鼬等待保存
- powershell - 用于了解 Mcafee 代理版本和保护版本的脚本 powershell
- c# - 硬盘读取文件速度超过声明速度。通过 FileStream 读取
- python - 参考熔体变量列以计算 datafrane 中的另一列
- r - 使用 for 循环替换非结构化文本文件中的单词
- scala - 特征中的 Akka Http 演员注入
- ios - 无法获取使用 UIImagePickerController 选取的图像的文件大小
- python-2.7 - 计算张量流音频识别中的 stft(Short-time Fourier transform)
- babeljs - 使用带有`useBuiltIns:'usage'`的redux-logger时,对象不支持属性或方法'assign'
- docker - Kafka clean startup: WARN ...领导者回复了一个未知的偏移量