我想要下面的一段代碼將2附加到列表'a',直到它獲得10的大小。但是,它不能以我希望的方式工作。我錯過了什麼?Python動態循環終止變量
a = [1,2]
for ctr in range(0,len(a)):
print ctr
if len(a) < 10:
a.append(2)
我想要下面的一段代碼將2附加到列表'a',直到它獲得10的大小。但是,它不能以我希望的方式工作。我錯過了什麼?Python動態循環終止變量
a = [1,2]
for ctr in range(0,len(a)):
print ctr
if len(a) < 10:
a.append(2)
你只循環兩次; len(a)
是只有評估創建range()
,而不是每循環迭代。因此,你只能落得長的名單4.
使用while
語句來代替:
while len(a) < 10:
a.append(2)
或.extend()
正確數量的2
S:
a.extend([2] * (10 - len(a)))
或使用+=
(這是.extend()
的簡稱):
a += [2] * (10 - len(a))
這兩種方法都完全避免了循環。
只是做一個while循環,直到它的大小你想要的:
a = [1,2]
while len(a) < 10:
a.append(2)
的問題是,你是對的a
目前的規模基礎的原始循環。評估時,它只會循環2次。另一方面,一個while
循環將每次都保持評估該長度。
range(len(a))
在循環開始時評估一次。在這一點上,你的列表有兩個項目,所以循環將被執行兩次。
做你想做什麼,更好的方法是:
a += [2] * (10 - len(a))
你知道你有多少項目來補充,所以加一次全部,而不是一個在一段時間逐一添加循環。
中的while循環嗎? – bfaskiplar
只是在另一種方法的完整性扔......(並且可以更加靈活填補了其他iterables等值...)
>>> from itertools import chain, islice, repeat
>>> list(islice(chain(a, repeat(2)), 10))
[1, 2, 2, 2, 2, 2, 2, 2, 2, 2]
for循環似乎有點短,沒有按是嗎?即使它每次都會被評估,但它不太可讀。 – keyser
我的主要關注點是沒有實現一個for循環做一個愚蠢的工作,但瞭解它是如何工作的,以及它如何區別於python – bfaskiplar