2017-11-11 133 views
1

用我的代碼,我會除了循環一次後,他會跳到列表中的下一個數字,但他沒有。任何人都知道我的代碼有什麼問題?Python:迭代列表

for j in range(len(k)): 
     s = [int(i) for i in str(k[j])] 

這兩行代碼是我正在解決的一個更大問題的一部分。

def kaprekarseries(n): 
    """ 
    >>> kaprekar_series(677) 
    [677, 99, 0] 
    >>> kaprekar_series(9876) 
    [9876, 3087, 8352, 6174] 
    >>> kaprekar_series(55500) 
    [55500, 54945, 50985, 92961, 86922, 75933, 63954, 61974, 82962] 
    """ 

    k = list() 
    k.append(n) 
    count = 0 

    while count < 10: 
     for j in range(len(k)): 
      s = [int(i) for i in str(k[j])] 
      m = sorted(s, key=int, reverse=True) 
      m2 = int(''.join(str(i) for i in m)) 
      l = sorted(s, key=int) 
      l2 = int(''.join(str(i) for i in l)) 
      g = m2 - l2 
      k.append(g) 
      if [item for item in k if k.count(item) <= 1]: 
       count += 1 
      else: 
       return k 
+2

它的確如此,但是您**每次都將結果重新分配給's'。所以在循環之後,'s'只存儲**最後的**結果。 –

+0

等待你將列表中的元素添加到列表中?不,那不行。範圍對象是在你啓動循環時構造的。但它不會在此過程中檢查列表。儘管如此迭代並同時更改列表是一個糟糕的主意。 –

回答

1

您的清單k在開始循環之前僅附加了一個元素。因此它是一個長度的列表,因此它只運行一次。

反思你的算法。