【问题标题】:List comprehension example I don't understand [closed]列表理解示例我不明白 [关闭]
【发布时间】:2019-06-14 07:03:55
【问题描述】:

我无法理解特定的列表理解示例。在下面的示例代码中,列表推导用于 set 方法的参数。我见过的大多数示例通常看起来像“x for x in y”。我已经阅读了文档,但它并没有为我清除它。 [marks for name] 到底在做什么。不应该是[对分数的分数]?

marksheet = []
for _ in range(0,int(input())):
    marksheet.append([input(), float(input())])

second_highest = sorted(list(set([marks for name, marks in marksheet])))[1]
print('\n'.join([a for a,b in sorted(marksheet) if b == second_highest]))

【问题讨论】:

  • 您需要查找列表推导以理解第一行,以及第二行的 join 的文档。
  • 它也过于复杂。 sorted(list(set([marks for name, marks in marksheet])))[1] => sorted({marks for name, marks in marksheet})[1]
  • 我查了列表理解,但还是不明白。我只看到列表理解的迭代部分,但没有看到转换或过滤,因此我不理解表达式。

标签: python python-3.x list list-comprehension


【解决方案1】:

您的代码正在使用 Python 的列表推导根据条件从另一个列表创建一个列表。

在此处查看有关列表推导的更多信息: https://www.programiz.com/python-programming/list-comprehension

[1] 正在访问排序列表的索引 1(第 2 项)处的项目。

对于.join,排序列表中的每一行都被打印出来,每行之间都有一个换行符(\n)。

【讨论】:

  • 好吧,[1] 正在按照我的推测进行,我只需要查看一些文档即可了解 .join 的作用。很抱歉再次询问,但阅读后我仍然无法完全掌握列表理解。我想我不明白这个表达,但你明白。你能解释一下这个表达吗? “名称标记”
  • 看起来 marksheet 是一个列表列表,每个内部列表中有 2 个项目。例如:marksheets = [[a,b],[c,d],[e,f]...] 所以,这样做是将内部列表 marks 的第 2 项放入一个新列表中。对于标记表[name, marks] in marksheet 中的每一项marks,它会将第二项marks 放入一个新列表中。
  • 列表推导式是一种遍历一个列表并同时创建另一个列表的方法。你可以像这样做同样的事情:my_list = [[['a','b'],['c','d'],['e','f']] new_list = [] for x, y in my_list: new_list.append(y) print new_list ['b', 'd', 'f']
猜你喜欢
  • 1970-01-01
  • 2014-04-02
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多