Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops_For Loop_While Loop - Fatal编程技术网

Python 具有真假条件的迭代数

Python 具有真假条件的迭代数,python,loops,for-loop,while-loop,Python,Loops,For Loop,While Loop,请帮忙 我有一份清单: a = ['False', 'False', 'True', 'True', 'True', 'False', 'False', 'True', 'True'] 我想生成迭代数,如果为False,则该数继续,如果为True,则该数保持不变。 我尝试以下代码: result = [] x = 1 for i in a: while i == 'False': result.append(x) if i == 'True':

请帮忙

我有一份清单:

a = ['False', 'False', 'True', 'True', 'True', 'False', 'False', 'True', 'True']
我想生成迭代数,如果为False,则该数继续,如果为True,则该数保持不变。 我尝试以下代码:

result = []
x = 1
for i in a:
    while i == 'False':
        result.append(x)
        if i == 'True':
            x+=1
            continue
            result.append(x)
        x += 1
它只是继续运行,没有显示任何输出。 所需输出为
[1,2,3,3,3,4,5,6,6]

我不知道它怎么了 谢谢参见下面的代码:

a = ['False', 'False', 'True', 'True', 'True', 'False', 'False', 'True', 'True']
result = []
x = 0
for i in a:
    if i == 'False':
        x+=1
    result.append(x)

print (result)

请注意,如果我理解了您的文本,您希望的输出是不正确的

这实际上可以通过
itertools中的
accumulate
很好地解决

from itertools import accumulate

a = ['False', 'False', 'True', 'True', 'True', 'False', 'False', 'True', 'True']

print(list(accumulate(1 if i == 'False' else 0 for i in a)))

与gtomer的结果相同,我认为这是正确的输出。

代码中的错误是,一旦我将值设为“False”,它将进入(无限)while循环,并且永远不会出现。Bcz i的值在while循环本身中从不改变

result = []
x=1
for i in a:
  if i=="False":
    x+=1
  result.append(x)

这应该适用于您

这是另一个版本(输出行为符合OP的要求):

用法:

>>> list(weird_sequence(['False', 'False', 'True', 'True', 'True', 'False', 'False', 'True', 'True']))
[1, 2, 3, 3, 3, 4, 5, 6, 6]

为什么在for循环的迭代中,
i
会改变?一旦出现
'False'
,您就陷入了无限循环。您是否尝试调试代码?
结果。在
继续后追加(x)
将永远不会执行,而您的语句是循环人。。。如果出现
'False'
如何操作,它将永远运行?我迭代列表中的值。然后,当i=='False'时,每个数字都存储在结果中,然后当迭代发现i=='True'时,数字保持不变并继续,直到列表结尾我的代码给出正确的输出:[1,2,2,2,3,4,4,4],它应该是[1,2,3,3,3,4,5,6,6]但是如果你计算错误,那么为什么是1,2,然后是3而不是2?当值在迭代中也改变+1时,如果下一个值仍然是“真”,那么它保持输出应该是[1,2,3,3,4,5,6,6]。该代码将给出[1,2,2,2,2,3,4,4]
>>> list(weird_sequence(['False', 'False', 'True', 'True', 'True', 'False', 'False', 'True', 'True']))
[1, 2, 3, 3, 3, 4, 5, 6, 6]