Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.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_Python 3.x - Fatal编程技术网

Python 在一个范围内循环?

Python 在一个范围内循环?,python,python-3.x,Python,Python 3.x,我有一个列表,如下所示。我想迭代列表,对于索引1中的每个“是”列表项,我想在得到另一个“是”之前,用“否”的出现次数更新索引4,然后向其中添加1。我的解决方案有效,除了倒数第二项(435…)应该有2,但我得到0 输入数据: [[428, 'yes', 428, 0, 0], [429, 'yes', 429, 0, 0], [430, 'no', 430, 0, 0], [431, 'no', 431, 0, 0], [432, 'yes', 432, 0, 0], [433, 'ye

我有一个列表,如下所示。我想迭代列表,对于索引1中的每个“是”列表项,我想在得到另一个“是”之前,用“否”的出现次数更新索引4,然后向其中添加1。我的解决方案有效,除了倒数第二项(435…)应该有2,但我得到0

输入数据:

[[428, 'yes', 428, 0, 0],
 [429, 'yes', 429, 0, 0],
 [430, 'no', 430, 0, 0],
 [431, 'no', 431, 0, 0],
 [432, 'yes', 432, 0, 0],
 [433, 'yes', 433, 0, 0],
 [434, 'no', 434, 0, 0],
 [435, 'yes', 435, 0, 0],
 [436, 'no', 436, 0, 0]]
期望输出:

[[428, 'yes', 428, 0, 1],
 [429, 'yes', 429, 0, 3],
 [430, 'no', 430, 0, 0],
 [431, 'no', 431, 0, 0],
 [432, 'yes', 432, 0, 1],
 [433, 'yes', 433, 0, 2],
 [434, 'no', 434, 0, 0],
 [435, 'yes', 435, 0, 2],
 [436, 'no', 436, 0, 0]]
这是我用来测试的整个脚本

fullchart = [
[428, 'yes', 428, 0, 0],
[429, 'yes', 429, 0, 0],
[430, 'no', 430, 0, 0],
[431, 'no', 431, 0, 0],
[432, 'yes', 432, 0, 0],
[433, 'yes', 433, 0, 0],
[434, 'no', 434, 0, 0],
[435, 'yes', 435, 0, 0],
[436, 'no', 436, 0, 0]
]

print('fullchart 1')
pprint.pprint(fullchart)

end_page = 0
for i in range(len(fullchart)):
    if fullchart[i][1] == 'yes':
        for b in range(i+1, len(fullchart)):
            print('printing b')
            print(b)
            if fullchart[b][1] == 'no':
                end_page += 1
            else:
                fullchart[i][4] = end_page + 1
                break
    else:
        pass

print('fullchart 2')
pprint.pprint(fullchart)

逻辑错误如下:

        if fullchart[b][1] == 'no':
            end_page += 1
        else:
            fullchart[i][4] = end_page + 1
            break
请注意,仅当您点击的答案不是
时,才更新
-行条目。因为在最后的
yes
之后没有这样的元素,所以最后一次想要的更新不会发生。 您需要在循环结束后重复该更新

另外,我认为如果您改变方法,您会发现调试起来更容易。数一数连续的
答案,直到找到其他答案。此时,返回到前面的
yes
行,您可以通过该计数轻松找到该行,并更新其第4个元素。
循环结束后再做最后一次。

处理这个问题的最简单方法似乎是向后迭代列表:

l = [
    [428, 'yes', 428, 0, 0],
    [429, 'yes', 429, 0, 0],
    [430, 'no', 430, 0, 0],
    [431, 'no', 431, 0, 0],
    [432, 'yes', 432, 0, 0],
    [433, 'yes', 433, 0, 0],
    [434, 'no', 434, 0, 0],
    [435, 'yes', 435, 0, 0],
    [436, 'no', 436, 0, 0]
]

count = 1

for row in reversed(l):
    if row[1] == 'no':
        count += 1
    else:
        row[4] = count
        count = 1
        
制作
l

[[428, 'yes', 428, 0, 1],
 [429, 'yes', 429, 0, 3],
 [430, 'no', 430, 0, 0],
 [431, 'no', 431, 0, 0],
 [432, 'yes', 432, 0, 1],
 [433, 'yes', 433, 0, 2],
 [434, 'no', 434, 0, 0],
 [435, 'yes', 435, 0, 2],
 [436, 'no', 436, 0, 0]]

这也应该更有效,因为它只会查看每个项目一次。

您的问题是什么?还有,您的标题与它有什么关系?这里没有
循环…在我的输出中,我没有在索引4位置得到像这样的2[435,‘是’,435,0,2]@ShadowRanger我觉得可能需要一段时间loop@MarkMeyer,那是个胖手指,对不起,我修好了。