簡體   English   中英

我在 for 循環中定義了一個變量,但是在循環之外打印它時,它不能正確打印

[英]I have a defined a variable inside a for loop, but when printing it outside of the loop it doesn't print correctly

這是代碼:

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 位數字的第一個索引,然后確定在此 position 中更常見的是 1 還是 0。 然后它會選擇第一個 position 中具有更常見數字的所有數字並將它們添加到列表中。 我想在程序結束時打印這個列表。

我已經定義了一個變量(稱為格式化)等於各種數字的列表。 當我在定義它的循環中打印它時,它會打印應該在列表中的所有數字,如下所示:

當我像上面的代碼一樣在循環之外打印它時,它只返回最終數字:

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

任何想法為什么會發生這種情況?

在您的循環中,每次迭代都會更新 formatted 的值。 在最后一次迭代之后,它不再更新,最后一個值是最后一個打印語句的 output。

一個更簡單的例子:

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

print(x)

這將打印出 99,即變量“x”保存的最后一個值。

可能您的代碼正在為每次迭代更新變量,因此在 for 循環中您需要 append 值而不是覆蓋它們,例如:

a = 0
b = 0

for i in 10:
    a = 1
    b = b + 1 # using the last value

print(a) # 1
print(b) # 9

首先,您不應該使用“list”作為變量名,因為它是用於實例化列表或 arrays 的內置名稱。 在第二個中,您的代碼重復 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]

參考: 列表壓縮列表、列表計數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM