繁体   English   中英

在 Python 中理解 [foo for bar, foo in arr]

[英]Understanding [foo for bar, foo in arr] in Python

我有一个元组列表,例如[(4, 'c'), (5, 'o'), (6, 'd')] 我正在努力更好地仅提取我需要的数据。 我现在可以使用 for 循环或使用 zip 解包来完成,但我正在寻找其他方法来扩展我的知识。

我在几个地方看到了下面的代码,它提取了元组的第二个索引

letters = [ foo for bar, foo in arr ] 

这是如何运作的? 如果我想提取第一个索引,这可能吗?

[.. for .. in ..]语法表示一个理解表达式,特别是用于创建一个列表,如封闭的[ ] 推导式通常与for语句类似,因为它们允许迭代某些东西,分配解包每个元素,然后对每个元素进行操作。

[ foo for bar, foo in arr ] 
#                     ^ iterable providing elements
#         ^ assignment of each element to name(s)
# ^ operation for each element

需要注意的是,中间的赋值与使用=进行赋值具有相同的功能:

  • 单个名称目标被分配了整个值
    a = (1, 2) or for a in [(1, 2), (3, 4)]
  • 多个名称目标被分配值的部分
    a, b = (1, 2)for a, b in [(1, 2), (3, 4)]

这使得理解可以方便地拆开元素并单独对每个部分进行操作 - 例如组合它们或丢弃一个。

为每个元素的部分使用适当的名称可以更清楚地了解正在发生的事情以及如何更改结果:

>>> # code of the question, using proper names
>>> pairs = [(4, 'c'), (5, 'o'), (6, 'd')]
>>> [letter for number, letter in pairs]
['c', 'o', 'd']
>>> # desired result of the question
>>> [number for number, letter in pairs]
[4, 5, 6]

推导式,尤其是列表的推导式,是许多编程语言中的一项功能。 它们源自某些人可能熟悉的数学“集合构建器符号”。 例如,数学表达式“arr中的一组数字”

{ 数量 | (数字,字母)∈ arr}

直接转化为集合理解:

#      { number | (number, letter) ∈ arr}
# 
nums = {number for number, letter in arr}

您可以以相同的方式提取第一个索引:

letters_first = [bar for bar, foo in arr]

这种速记技术在 Python 中称为“列表理解” 一般语法是

[expression for variable in list] 
arr = [(4, 'c'), (5, 'o'), (6, 'd')]
letters = [ bar for bar, foo in arr ] #  it will extract the first index

这称为列表理解。 它使用来自 bar 的 foo 和来自 arr 的 foo 创建一个列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM