Python 在一个范围内循环?
我有一个列表,如下所示。我想迭代列表,对于索引1中的每个“是”列表项,我想在得到另一个“是”之前,用“否”的出现次数更新索引4,然后向其中添加1。我的解决方案有效,除了倒数第二项(435…)应该有2,但我得到0 输入数据: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
[[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,那是个胖手指,对不起,我修好了。