Python for&;如果循环不工作?

Python for&;如果循环不工作?,python,python-2.7,if-statement,for-loop,Python,Python 2.7,If Statement,For Loop,我有以下代码: dd = input("What is your desired degree for slices? ") listnum = int(360 / dd) a = OrderedDict() for x in range(0,listnum): for j in range(len(posvcs)): begin = 0 end = dd if (posvcs[j,2] >= begin) & (posvc

我有以下代码:

dd = input("What is your desired degree for slices? ")
listnum = int(360 / dd)

a = OrderedDict()
for x in range(0,listnum):
    for j in range(len(posvcs)):
        begin = 0
        end = dd
        if (posvcs[j,2] >= begin) & (posvcs[j,2] < end):
            a["dataset{0}".format(x)] = posvcs[begin:end,2]
            begin = begin + end
            end = begin + dd
dd=input(“您对切片的期望程度是多少?”)
listnum=int(360/dd)
a=OrderedDict()
对于范围内的x(0,listnum):
对于范围内的j(len(posvcs)):
开始=0
结束=dd
如果(posvcs[j,2]>=begin)和(posvcs[j,2]
它应该在“posvcs”第2列的每一行中查找以度为单位的两个不同值之间的值。例如,如果我想让我的饼图以45度的增量切割成8块,并且我的数据集(posvcs)具有角度值介于0和360之间的点,我希望它首先只查看所需的角度=0到45。然后,获取相应的行和列,将数据放入“dataset0”。然后,它将把45到90度的数据放入“数据集1”

它所做的是获取“dd”行数(因此在我的示例中,它将获取前45行)并仅备份该数据。然后,与“开始”和“结束”值更改为移动到指定的下一个角度增量不同,它保持在45

非常感谢您的帮助


编辑:带有缩进的打字。它现在是按我的程序编写的。

我还没有查看详细信息,但有一个简单的错误:

if (posvcs[j,2] >= begin) & (posvcs[j,2] < end)
if(posvcs[j,2]>=begin)和(posvcs[j,2]
在Python中,使用单词“and”代替&,这是一个按位and运算符。i、 e

if (posvcs[j,2] >= begin) and (posvcs[j,2] < end)
if(posvcs[j,2]>=begin)和(posvcs[j,2]
改用这个:

begin = 0
end = dd
for x in range(0,listnum):
    a["dataset{0}".format(x)] = []
    for j in range(len(posvcs)):
        if (posvcs[j][2] >= begin) and (posvcs[j][2] < end):
            a["dataset{0}".format(x)].append(posvcs[j][2])
    begin += dd
    end += dd
begin=0
结束=dd
对于范围内的x(0,listnum):
a[“数据集{0}”。格式(x)]=[]
对于范围内的j(len(posvcs)):
如果(posvcs[j][2]>=开始)和(posvcs[j][2]<结束):
a[“数据集{0}”.format(x)].append(posvcs[j][2])
开始+=dd
结束+=dd

您可以非常轻松地使用它来解决此问题,它非常适合以这种方式处理数字。此外,它还允许您使用布尔数组作为索引,以便删除大量循环

import numpy as np
dd = input("What is your desired degree for slices? ")

limits = range(0, 360, int(dd))

# Append 361 just so we get the last group
limits.append(361)

datasets = list()

# Convert to a numpy array
pos = np.array(posvcs)

# Now group everything
for k in range(len(limits) - 1):
    inrange = np.logical_and(pos[:,2] >= limits[k], pos[:,2] < limits[k+1])
    datasets.append(pos[inrange,2])
如果要从它们执行更多计算,我建议将它们保留为numpy数组:

# Calculating the mean of each group
means = [d.mean() for d in datasets]

# Standard deviation of each group
stdevs = [d.std() for d in datasets]
高级

如果您真的想沿着
numpy
路径前进,您可以用如下内容替换第一部分:

group_ids = np.digitize(pos[:,2], limits)
datasets = [pos[group_ids == k,2] for k in range(1, len(limits))]

你犯了什么错误?我假设至少有一部分或您的问题是您试图使用索引2(
posvcs[j,2]
)而不是索引1(
posvcs[j,1]
)为第二列编制索引。请记住,python中的索引是基于零的!另外,…
行和下面的j的
需要再缩进一个缩进,也许这只是你问题中的一个输入错误?只是一个旁注。通常,如果发现自己在变量或字典密钥名称中包含一个数字,则表示可能应该考虑使用不同的数据结构来保存数据。在这种情况下,可能是一个列表,而不是一个dict,其键为
dataset1
dataset2
,等等。所以我实际上没有收到错误,只是没有做我知道它需要做的事情,你知道吗?我称它为第2列,但从技术上讲,它是第3列(0和1是其他值),哈哈,我在过去的代码中遇到了这个问题,请务必记住基于零的索引。我的2800+行数据(posvcs)文件中的前45行从1.2到13.199的角度(第2列)运行,这些是它保存到我的预制和预制数组(dataset0、dataset1等)中的唯一值。我需要它从1.2开始,以45结束,但不等于45。@Suever,我不知道如何创建类似dict的预制和预制列表?我需要它,使用我的“dd”值(即45度),自动创建那么多数组(360/dd),并将它们命名为0,1,2等。不幸的是,当我将其更改为“&”时,它没有更改它。。它仍然运行在45行上,而不是行中的值本身(应该上升到45度)。这太疯狂了,它仍然给了我和以前一样的东西。为什么要一直到第45行,而不是查看值,以及它们是否等于45?posvcs是一个列表列表,对吗?尝试将
开始
结束
声明移动到最外层的循环之外,因此我输入了您的第一个答案,但它不起作用,但现在(使用您的第二个答案),它给我的值介于32.78到36之间,这是另外45行/行数据,但不是我需要的。什么是posvcs?我使用Python3,你用两种不同的方式对它进行索引:
[x,y]
[x:y,z]
看起来很奇怪Posvcs是我的2800行,6列数据,我需要访问第2列来查看每行的值(第2列是我的角度,它们从0到360排序)真糟糕!!非常感谢。所以现在,如果我想访问每一个,我会称之为数据集[0]或其他什么?@TC Yes这就是访问它们的方式。现在,记住它们将是numpy数组而不是列表。我不知道你想用它们做什么,但如果有什么问题,我建议你用这种方式保存它们,否则你可以将它们转换为列表needed@Seuever啊,好的,我应该在数据集还是pos上使用tolist()函数?我只需要能够将一系列统计分析函数应用于单独的数组(例如,将它们装箱、加权平均值等)最好使用列表还是将其保留为数组?我已经更新了我的答案,以演示如何转换为列表列表。如果您正在执行均值等操作,我肯定会将它们保留为numpy数组,因为该功能是内置的。请查看numpy文档。(添加一些示例以响应)
group_ids = np.digitize(pos[:,2], limits)
datasets = [pos[group_ids == k,2] for k in range(1, len(limits))]