如何比较另一个列表中的单个项目?
Posted
技术标签:
【中文标题】如何比较另一个列表中的单个项目?【英文标题】:How do i compare individual items in another list? 【发布时间】:2022-01-22 10:50:36 【问题描述】:我很新,还在学习 python。我需要知道如何将列表中的项目与另一个列表进行比较。
mc_zip = zip(name, class)
mc_list = list(mc_zip)
class_zip = zip(class_name, class_number)
class_list = list(class_zip)
print(mc_list)
print(class_list)
输出
mc_list = [('AA', 5537), ('AA', 5620), ...., ('AB', 5531)]
class_list = [('AA', 5537), ('AA', 1244), ...., ('AZ', 4545)]
mc_list
是没有上课的学生,class_list
是学校的学生名单。我想知道如何将mc_list
的名称与class_list
进行比较,然后才能从mc_list
中提取具有相同名称的数据。这样我就可以知道特定名称所占用的类。
新的输出应该是:
mcstudentclass = [('AA', 5537),('AA', 5540), ('AA', 1244),('AB', 5531), ('AB', 6636),.....]
如果您想知道 ('AB', 6636) 或 ('AA', 5540) 来自哪里。它来自 class_list .... (....) 代表了几个具有不同类号的重复名称,反之亦然。 如果有点难以理解,请见谅。
【问题讨论】:
您是说class_list
有每个学生注册的课程列表,mc_list
有他们跳过的课程列表,您想知道他们参加了哪些课程吗?顺便说一句,您永远不应该将变量命名为“类”。这是一条 Python 语句。
您是说要创建一个由两个列表中都存在的元素组成的新列表吗?
您想如何准确地比较它们?比如,交集或减法,还是更复杂的东西?请edit 澄清。添加示例输入和所需的输出会有很大帮助。参考文献minimal reproducible example.
您好,所以 class_list 基本上是学生的姓名和他们拥有的班级。每个学生最多可以有一个以上的班级。 mc list 是学生的姓名和他们跳过的班级的班级编号。现在我需要比较 mc_list 和 class_list 的名称,以便我可以得到他们需要参加的所有班级编号。我也希望它像上面的输出一样在列表中。
('AB', 6636)
来自哪里?请提供完整的示例输入和输出。
【参考方案1】:
如果您需要人们从他们注册的课程列表和他们错过的课程列表中获得的课程列表,这里有两个选项,它们以您提供的相同压缩格式开头。
names = ["Alice", "Bob", "Charlie"]
classes = [1, 2, 3]
registered = [("Alice", 1), ("Alice", 2), ("Alice", 3), ("Bob", 2), ("Bob", 3), ("Charlie", 1), ("Charlie", 3)]
missed = [("Alice", 1), ("Charlie", 3)]
# 1. list comprehension
attended = [p for p in registered if p not in missed]
print(attended)
# 2. set difference
attended = set(registered) - set(missed)
print(attended)
【讨论】:
【参考方案2】:将班级列表放入字典中。 将 mc_list 与它进行比较。 这样会节省很多时间。
如果将列表与列表进行比较,则必须遍历列表。 我查字典不需要。
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于如何比较另一个列表中的单个项目?的主要内容,如果未能解决你的问题,请参考以下文章
c# 在 LINQ 查询返回的列表中查找项目并将其值与列表中的另一个项目进行比较
Listview 的项目位置 0 持有另一个包含 10 个项目的列表视图,每个项目打开单个活动但不同的文本数据
Listview的项目位置0持有另一个列表视图,其中包含10个项目,每个项目打开单个活动但不同的文本数据