【问题标题】:Output keeps repeating itself输出不断重复
【发布时间】:2021-07-22 20:04:27
【问题描述】:

我创建了一个函数来打印“True”元素的索引和长度。我设法给出了答案,但输出不断重复。

data = [True, True, False, False, True, 
                       True, True, True, True, False,  
                       False, True, True]  

def find (stat, min):
    newlist = []
    start = 0
    end = 0
    x = [index for index, ele in enumerate(data) if ele]          
    for index,value in enumerate(x):
        if index < len(x)-1:
            if x[index+1]> value+1:
                end = index +1
                newlist.append(x[start:end])
                start = end
        else:
            newlist.append(x[start: len(x)])
    for i in newlist:
        x = []
        x = [i[0],len(i)]
        print(x)
    return x
    
    
for k in range(len(data)):
    final = find(data[k],2)
    print(final)

我想要的输出是 [[0,2],[4,5],[11,2]] 但输出给了我:

[0, 2]
[4, 5]
[11, 2]
[11, 2]
[0, 2]
[4, 5]
[11, 2]
[11, 2]
[0, 2]
[4, 5]
[11, 2]
[11, 2]
[0, 2]
[4, 5]
[11, 2]
[11, 2]
[0, 2]
[4, 5]
[11, 2]
[11, 2]
[0, 2]
[4, 5]
[11, 2]
[11, 2]
[0, 2]
[4, 5]
[11, 2]

【问题讨论】:

  • 用您自己的话说,for i in newlist: 循环的预期目的是什么?用您自己的话来说,newlist 变量的预期目的是什么?用你自己的话来说,return x 的最终目的是什么?您期望返回什么,为什么?仔细追踪你的逻辑。
  • 我不明白你所说的“'True'元素的索引和长度”是什么意思。 True 不是序列,所以它没有长度。当你说答案应该是[[0,2],[4,5],[11,2]]时,背后的原因是什么?
  • 子列表的第一个数字是索引,第二个数字是'True'元素在序列的下一个数字(即3)被破坏之前的持续时间
  • 那么,从该点开始的连续True 元素的数量?
  • @Karl Knechtel 是的

标签: python


【解决方案1】:

您正在使用 2 个打印语句,这就是您看到它重复的原因。

这里,去掉return语句,因为打印出来要好很多-

for i in newlist:
        x = []
        x = [i[0],len(i)]
        print(x)

最后调用函数

 find_episodes(data,2)

【讨论】:

  • @PCM 我的函数仍然会随着列表中元素的数量重复。例如,由于列表中有 13 个元素,因此输出会重复 13 次
  • 好吧,看看编辑。在这种情况下不要使用 for 循环并删除 [k]
【解决方案2】:

你在这里多次调用你的函数find_episodes

for k in range(len(data)):
    final = find_episodes(data[k],2)

然而,你的函数实际上并不依赖于它的参数。因此,完全相同的代码将被执行len(data) 次,从而重复输出。

我相信你的意思是只执行一次find_episodes

最后,你的print(final) 是重复的,因为最后一个x 已经在函数内部打印了。这就是为什么[11, 2] 每次打印两次的原因。

【讨论】:

  • 请查看所需的输出。如果你只调用一次函数,你认为结果会来吗
  • 我测试了它,是的,只调用一次函数就可以得到所需的输出。
  • @PCM@vic.col961 哦,好的,我现在明白了。非常感谢您的帮助!
  • 你说的是对的,但是如果你print(final),你只会得到一个值,这是for循环中的最后一个值。所以不要使用return语句。而是打印结果
  • @PCM 我同意退货没用,但这不是问题的原因。
猜你喜欢
  • 2012-10-27
  • 1970-01-01
  • 2015-12-15
  • 2020-08-11
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
相关资源
最近更新 更多