[x ** 2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
我搜索过,似乎这被称为列表理解,但它是如何工作的?
从文档中:
列表理解提供了创建列表的简明方法。常见的应用程序是创建新的列表,其中每个元素是应用于另一个序列的每个成员的一些操作的结果或可迭代的,或者创建满足特定条件的这些元素的子序列。
关于您的问题,列表理解与下面的“普通”Python代码做了相同的事情:
>>> l = []
>>> for x in range(10):
... l.append(x**2)
>>> l
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> list(map(lambda x: x**2, range(10)))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> [x**2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> [x.strip() for x in ('foo\n', 'bar\n', 'baz\n')]
['foo', 'bar', 'baz']
>>> [int(x) for x in ('1', '2', '3')]
[1, 2, 3]
>>> d = {'foo': '10', 'bar': '20', 'baz': '30'}
>>> [d[x] for x in ['foo', 'baz']]
['10', '30']
>>> d = {'foo': '10', 'bar': '20', 'baz': '30'}
>>> [int(d[x].rstrip('0')) for x in ['foo', 'baz']]
[1, 3]
>>> l = []
>>> for x in range(10):
... if x%2:
... l.append(x)
>>> l
[1, 3, 5, 7, 9]
啊,那太复杂了。下面的版本呢?
>>> [x for x in range(10) if x%2]
[1, 3, 5, 7, 9]
若要使用if...else
三元表达式,需要将if...else...
放在x
之后,而不是放在范围(10)
之后:
>>> [i if i%2 != 0 else None for i in range(10)]
[None, 1, None, 3, None, 5, None, 7, None, 9]
你听说过嵌套列表理解吗?您可以将两个或多个for
放在一个列表理解中。例如:
>>> [i for x in [[1, 2, 3], [4, 5, 6]] for i in x]
[1, 2, 3, 4, 5, 6]
>>> [j for x in [[[1, 2], [3]], [[4, 5], [6]]] for i in x for j in i]
[1, 2, 3, 4, 5, 6]
让我们讨论第一部分,[[1,2,3],[4,5,6]]中x的,它给出
[1,2,3]
和[4,5,6]
。然后,for i in x
给出1
、2
、3
和4
、5
、6
。
警告:您总是需要将x in[[1,2,3],[4,5,6]]
的放在i in x
的之前:
>>> [j for j in x for x in [[1, 2, 3], [4, 5, 6]]]
Traceback (most recent call last):
File "<input>", line 1, in <module>
NameError: name 'x' is not defined
>>> {x for x in [1, 1, 2, 3, 3, 1]}
{1, 2, 3}
>>> set([i for i in [1, 1, 2, 3, 3, 1]])
{1, 2, 3}
>>> {i: i**2 for i in range(5)}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
>>> d = {}
>>> for i in range(5):
... d[i] = i**2
>>> d
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
(i表示范围(5)中的i)
是否给出元组?不!,这是一个生成器表达式。返回生成器:
>>> (i for i in range(5))
<generator object <genexpr> at 0x7f52703fbca8>
与:
>>> def gen():
... for i in range(5):
... yield i
>>> gen()
<generator object gen at 0x7f5270380db0>
您可以将其用作生成器:
>>> gen = (i for i in range(5))
>>> next(gen)
0
>>> next(gen)
1
>>> list(gen)
[2, 3, 4]
>>> next(gen)
Traceback (most recent call last):
File "<input>", line 1, in <module>
StopIteration
>>> sum(i**2 for i in range(5))
30
问题内容: 我有以下代码: 当我在Python shell中运行它时,它返回: 我已经搜索过了,这似乎叫做列表理解,但是它如何工作? 问题答案: 我有以下代码: 当我在Python shell中运行它时,它返回: 我已经搜索过了,这似乎叫做列表理解,但是它如何工作?
为了减少内核或跨进程内存泄漏(Spectre攻击),Linux内核1将使用一个新选项编译,引入到,以便通过所谓的retpoline执行间接调用。 这似乎是一个新发明的术语,因为谷歌搜索只是最近才使用(通常都是在2018年)。 1但是,它不是Linux特有的--类似或相同的构造似乎被用作其他操作系统缓解策略的一部分。
当我试图通过heroku打开我正在处理的应用程序时,我得到了一个应用程序错误。我查看了heroku日志,发现以下错误: “错误H10(应用程序崩溃)- 我不确定错误指的是什么,或者我如何解决导致错误的问题。你能给的任何帮助都会很棒!
问题内容: 有5 s,而我只用了1 s(最后一个)。 其他用途是什么?我可以在哪些实际应用中使用它们? 问题答案: 值的完整列表为: (来自https://www.w3schools.com/js/js_ajax_http_response.asp) 实际上,除了4之外,几乎几乎不使用它们中的任何一个。 一些 XMLHttpRequest实现可能会让您在when中看到部分接收到的响应,但这不是普遍
我所知道的关于排字的只是它们以某种方式取代了舱单。互联网上的信息很少,不能给我提供一个很好的主题意识。 因此,如果有人分享一些关于排字的有用材料的链接,包括示例和流行的用例,我会很高兴的。也欢迎详细的解答和解释。
我在React中看到了这段代码,比如 但我没能在谷歌上找到任何解释。也许这个问题是愚蠢的,但我感谢任何帮助,也许是链接到一些现有的解释或例子。