Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有人能解释一下吗;“用于循环”;对我来说?_Python_List Comprehension - Fatal编程技术网

Python 有人能解释一下吗;“用于循环”;对我来说?

Python 有人能解释一下吗;“用于循环”;对我来说?,python,list-comprehension,Python,List Comprehension,非常抱歉,我不理解隐式for循环。所以我想我可以问问是否有人会为我解释得更多一些 在《巨大的痛苦》一书中,我编写了以下隐式for循环: ueberdata= [1,5,2,6,1,2,3,4,1,3,5,6] order = [1,3,5] ind = [list(ueberdata).index(i) for i in order] 这给了我这些东西第一次出现的顺序索引 ind : 0,6,11 到目前为止还不错。现在我想扩展这个例子。也许ueberdata更大。也许我现在想要所有的指数。

非常抱歉,我不理解隐式for循环。所以我想我可以问问是否有人会为我解释得更多一些

在《巨大的痛苦》一书中,我编写了以下隐式for循环:

ueberdata= [1,5,2,6,1,2,3,4,1,3,5,6]
order = [1,3,5]
ind = [list(ueberdata).index(i) for i in order]
这给了我这些东西第一次出现的顺序索引

ind : 0,6,11
到目前为止还不错。现在我想扩展这个例子。也许ueberdata更大。也许我现在想要所有的指数。我被难住了。我得想办法把这些套圈套起来。有人能帮我理解这个问题吗

一些澄清(对不起,伙计们,我真的需要更好地表达自己): 我主要想做的是绘制一个数据集。我有这3种类型的数据点,我想在我的图上看到。现在,我的数据集当然长于3:)。我想画另一列,所以我需要这些索引。很抱歉刚才这么说,但我想这可能会分散我的注意力。我想绘制文件中的所有数据点,而不仅仅是第一组数据点

这叫做“a”

您的代码可能会变得更简单,但不确定您为什么要在已有列表的情况下创建该列表:

ind = [uberdata.index(i) for i in order]
如果你想要更多的索引,只需将
顺序
加长。

这称为一个“”

您的代码可能会变得更简单,但不确定您为什么要在已有列表的情况下创建该列表:

ind = [uberdata.index(i) for i in order]

如果您想要更多的索引,只需将
顺序
加长。

如果您想要所有的索引,您可以这样做

>>> ueberdata= [1,5,2,6,1,2,3,4,1,3,5,6]
>>> order = [1,3,5]
>>> [[i for i,j in enumerate(ueberdata) if j==k] for k in order]
[[0, 4, 8], [6, 9], [1, 10]]
如果列表非常大,那么创建一个helperDefaultDict会更有效

>>> from collections import defaultdict
>>> D = defaultdict(list)
>>> orderset = set(order)
>>> for i,j in enumerate(ueberdata):
...  if j in orderset:
...   D[j].append(i)
... 
>>> [D[i] for i in order]
[[0, 4, 8], [6, 9], [1, 10]]

如果你想要所有的索引,你可以这样做

>>> ueberdata= [1,5,2,6,1,2,3,4,1,3,5,6]
>>> order = [1,3,5]
>>> [[i for i,j in enumerate(ueberdata) if j==k] for k in order]
[[0, 4, 8], [6, 9], [1, 10]]
如果列表非常大,那么创建一个helperDefaultDict会更有效

>>> from collections import defaultdict
>>> D = defaultdict(list)
>>> orderset = set(order)
>>> for i,j in enumerate(ueberdata):
...  if j in orderset:
...   D[j].append(i)
... 
>>> [D[i] for i in order]
[[0, 4, 8], [6, 9], [1, 10]]
从中,列表理解可以理解为

括号中包含表达式,后跟for子句,然后为零 或多个for或if子句。结果将生成一个新的列表 在for和if的上下文中计算表达式 随后的条款。”

从某种意义上说,类似于

ind=[]
for i in order:
  ind.append(list(ueberdata).index(i))
回答你的第一个问题时,它并不取决于列表的大小

为了获取所有索引,我将使用一个辅助函数

lambda value : [x for x in range(len(ueberdata)) if ueberdata[x] == value]
从中,列表理解可以理解为

括号中包含表达式,后跟for子句,然后为零 或多个for或if子句。结果将生成一个新的列表 在for和if的上下文中计算表达式 随后的条款。”

从某种意义上说,类似于

ind=[]
for i in order:
  ind.append(list(ueberdata).index(i))
回答你的第一个问题时,它并不取决于列表的大小

为了获取所有索引,我将使用一个辅助函数

lambda value : [x for x in range(len(ueberdata)) if ueberdata[x] == value]

它们被称为列表理解。谷歌“列表理解教程”获取一些提示。正确的答案不是吗
ind:0,6,1
?@Robᵩ 对于第一次出现的
5
是正确的。它们被称为列表理解。谷歌“列表理解教程”获取一些提示。正确的答案不是吗
ind:0,6,1
?@Robᵩ 对于第一次出现的
5
是正确的。谢谢,它似乎已经被Rob更正了ᵩ.谢谢,好像已经被罗布纠正了ᵩ.是的,我也是这样读这篇文章的。对不起,我想做点别的事情。对你的麻烦投了赞成票:)是的,我也是这样读这篇文章的。对不起,我想我还想做些别的事情。为你的麻烦投票:)