【问题标题】:I have a defined a variable inside a for loop, but when printing it outside of the loop it doesn't print correctly我在 for 循环内定义了一个变量,但是在循环外打印它时无法正确打印
【发布时间】:2021-12-31 13:07:20
【问题描述】:

代码如下:

count_1 = 0 
count_0 = 0 
list = ('001111011011','000110001010','011010111111')`
for i in list:
index = 0 
y = i[index]

if y == "1":
    count_1 = count_1 + 1
if y == "0":
    count_0 = count_0 + 1

if count_1 > count_0:
    for i in list:
        final_after_1 = []
        if i[0] == "1":
            final_after_1.append(i)
            formatted = (','.join(final_after_1))
if count_0 > count_1:
    for i in list:
        final_after_1 = []
        if i[0] == "0":
            final_after_1.append(i)
            formatted = (','.join(final_after_1))
if count_0 == count_1:
    for i in list:
        final_after_1 = []
        if i[0] == "1":
            final_after_1.append(i)
            print(final_after_1)
            formatted = (','.join(final_after_1))
    

print(formatted)

(如果这个问题措辞不好,请提前道歉,这是我第一次提问)。

除了这个问题之外,这段代码运行良好。它旨在识别列表中每个 12 位数字的第一个索引,然后确定在该位置更常见的是 1 还是 0。然后,它选择第一个位置具有更常见数字的所有数字并将它们添加到列表中。我想在程序结束时打印这个列表。

我已经定义了一个变量(称为格式化)以等于各种数字的列表。当我在定义它的循环中打印它时,它会打印所有应该在列表中的数字,如下所示:

当我像上面的代码那样在循环之外打印它时,它只返回最终数字:

011010111111

而像这样在循环中打印它:

if count_0 > count_1:
        for i in list:
            final_after_1 = []
            if i[0] == "0":
                final_after_1.append(i)
                formatted = (','.join(final_after_1))
                print(formatted)

确实返回这个完整的所需列表:

001111011011

000110001010

011010111111

任何想法为什么会发生这种情况?

【问题讨论】:

  • 您的代码没有标识,添加一些代码以补充您的问题时要小心

标签: python loops variables printing


【解决方案1】:

在您的循环中,formatted 的值会针对每次迭代进行更新。在最后一次迭代之后,它不再更新,最后一个值是最后一个 print 语句的输出。

一个更简单的例子:

for x in range(100):
    pass//looping over, x is 0..99

print(x)

这将打印出 99,变量“x”保存的最后一个值。

【讨论】:

    【解决方案2】:

    可能您的代码正在为每次迭代更新变量,因此在 for 循环中您需要附加值而不是覆盖它们,例如:

    a = 0
    b = 0
    
    for i in 10:
        a = 1
        b = b + 1 # using the last value
    
    print(a) # 1
    print(b) # 9
    

    首先,您不应该使用“list”作为变量名,因为它是用于实例化列表或数组的内置名称。在第二次你的代码重复 3 次只是为了计数,让我展示一个更好的列表压缩方法:

    l = ('001111011011','000110001010','011010111111')
    
    first_elements = list()
    for x in l:
        v = x[0] # first element
        first_elements.append(int(v))
    # [0,0,0]
    
    count_0 = first_elements.count(0) 
    # count_0 = 3
    
    count_1 = first_elements.count(1) 
    # count_1 = 0
    

    使用列表压缩

    first_elements = [int(x[0]) for x in l]
    # [0,0,0]
    

    参考:list compreenssionslistlist.count

    【讨论】:

    • 我不确定我是否完全理解您使用的语法,您有什么方法可以解释它是如何工作的吗?
    • 当然,list compreensison 用于迭代一个结构,在这种情况下是一个列表 "[1,2,..]" 所以在 "x" 我们有列表 "x" 的每个元素=1" 然后 "x=2" 等等。对于每个实际上是字符串 '0' 的值都不同于 0(整数零),因此我们需要使用变为 0(零)的符号 int('0') 进行转换,以便我们可以使用内置函数进行计数在引用中称为“计数”。 "count" 接收一个参数,指示哪个计数,例如序列中零的数量。
    • 我明白了,谢谢!
    • 我还编辑了答案,以便更好地解释代码
    猜你喜欢
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多