我在 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 位数字的第一个索引,然后计算出 1 或 0 在该位置更常见。然后它选择所有在第一个位置具有更常见数字的数字并将它们添加到列表中。我想在程序结束时打印这个列表。
我已经定义了一个变量(称为格式化的)等于各种数字的列表。当我在定义它的循环中将其打印出来时,它会打印列表中应包含的所有数字,如下所示:
当我像上面的代码一样在循环外打印它时 return 只有最后的数字:
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)
是否 return 这个完整的所需列表:
001111011011
000110001010
011010111111
知道为什么会这样吗?
在您的循环中,每次迭代都会更新格式化的值。在最后一次迭代后,它不再更新,最后一个值是最后一个打印语句的输出。
一个更简单的例子:
for x in range(100):
pass//looping over, x is 0..99
print(x)
这将打印出 99,即变量“x”保存的最后一个值。
可能您的代码正在为每次迭代更新变量,因此在 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 compreenssions, list, list.count
代码如下:
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 在该位置更常见。然后它选择所有在第一个位置具有更常见数字的数字并将它们添加到列表中。我想在程序结束时打印这个列表。
我已经定义了一个变量(称为格式化的)等于各种数字的列表。当我在定义它的循环中将其打印出来时,它会打印列表中应包含的所有数字,如下所示:
当我像上面的代码一样在循环外打印它时 return 只有最后的数字:
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)
是否 return 这个完整的所需列表:
001111011011
000110001010
011010111111
知道为什么会这样吗?
在您的循环中,每次迭代都会更新格式化的值。在最后一次迭代后,它不再更新,最后一个值是最后一个打印语句的输出。
一个更简单的例子:
for x in range(100):
pass//looping over, x is 0..99
print(x)
这将打印出 99,即变量“x”保存的最后一个值。
可能您的代码正在为每次迭代更新变量,因此在 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 compreenssions, list, list.count