我正在观看如何使用python绘制Histrogram并使用此声明并且我不确定它的含义或工作原理。
population_ages = [22,55,62,45,21,22,34,42,42,4,99,102,110,120,121,122,130,111,115,112,80,75,65,54,44,43,42,48]
ids = [x for x in range(len(population_ages))]
我不确定这句话是如何运作的。我曾尝试观看有关len和范围如何工作的视频,但仍不确定它如何适用于此声明。
ids = [..... range(len(population_ages)]
谢谢,
答案 0 :(得分:1)
range(start_number, end_number)
会创建一个从start_number到end_number的值范围,因此在您的情况下,由于population_ages的长度为28,因此您的值为0,1,2...27
[x for x in ...]
只是为您提供列表中的每个值。例如,[x为'Hello'中的x]将使列表等于['H', 'e', 'l', 'l', 'o']
。 x
可以命名为任何名称。
答案 1 :(得分:1)
它被称为列表理解,
ids = [x for x in range(len(population_ages))]
与
相同ids = []
for x in range(len(population_ages)):
ids.append(x)
能够仅使用一行代码拼写它通常有助于提高可读性。
在这种情况下,您经常会看到人们使用i
作为变量的名称,如:
for i in range(len(mylist)):
因为i
是一个整数,将合法索引变为mylist
,即半开区间[0..len(mylist)>这意味着第一次i
将获得值0
,并且最后一次获得列表的长度 - 1。
答案 2 :(得分:1)
让我们看看:
population_ages
是包含所有记录的列表。
len(population_ages)
返回列表的长度。列表population_ages
有28个元素,因此len(population_ages)
返回28。
range(len(population_ages))
,在本例中为range(28)
,返回[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]
。这是一个列表,其中包含可用于访问population_ages的所有可能索引(您可以评估population_ages[0]
,population_ages[1]
,...,population_ages[27]
;但是从28开始,它将会加注和IndexError
)。
[x for x in range(len(population_ages))]
生成一个列表,其中每个元素都是range(len(population_ages))
中的每个元素。此步骤不会更改任何内容,结果仍为[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]
。
这就是ids被保存的东西。我不知道你的代码后来如何使用它,但这是该行正在做的一步一步。
答案 3 :(得分:1)
在你的例子中:
len(population_ages)
:计算列表population_ages
的长度。
for x in range(len(population_ages)
:当您执行for x in range(number)
之类的循环时,您表示循环的范围从1到number
。在这种情况下,它将从1到列表的长度为28。
在表达式[x for x in range(number))]
中,第一个x取的是循环评估得到的值,在你的情况下它将是1,2,3 ..... 25。
如果您想要显示列表的相同值,您应该输入以下内容:
ids = [x for x in population_ages)]
有关这些主题的更多信息,请阅读:
len_documentation,python-list-comprehensions
我希望这可以帮到你
答案 4 :(得分:1)
其他答案已涵盖基础知识。
我想在
中添加列表理解ids = [x for x in range(len(population_ages))]
是
的专业化[x for x in iterable]
这不是很有用,因为
x
,从可迭代列表理解在以下情况下更有用:
[f(x) for x in iterable if condition(x)]
如果真的想要一个列表,那就更好了&通过将iterable传递给list
对象来更快地创建它:
list(range(len(population_ages)))
(在python 2中,range(len(population_ages))
甚至足够,因为它直接返回list
,但是如果你真的需要一个可订阅的对象,你的代码就无法移植到python 3。)
另请注意,操纵索引通常是错误的来源。 Python有很多方法不来使用索引(与C语言不同)。几个例子:
enumerate(iterable)
zip
或itertools.zip_longest
所以在使用指数之前要认真思考。可能有更好的方法。