2016-02-27 25 views
0

n是一個整數,xs是一個整數列表。如何將輸出設置爲無空格列表?

n = 2 
xs = [1, 2, 3, 4, 5, 6] 

def multiples(n,xs): 
    empty = [] 
    for i in range(len(xs)): 
     if xs[i] % n == 0: 
      print(xs[i]) 
     return empty 

它應該給我輸出2,4,6在三個不同的行。有什麼辦法可以將它們合併成一個沒有空格和逗號的列表?

n=3 
xs=[11, 13] 

將輸出變成'[]',空集?

+0

當你只使用元素本身時,爲什麼要使用'range()'? –

+0

@ IgnacioVazquez-Abrams我同意。看看我的答案。 – zondo

+0

只是使用append()方法的列表。在提供的情況下,它將是空的.append(xs [i]) – hemraj

回答

0

你的代碼中有幾個問題。第一個問題是,你只是檢查你的數組中的第一個元素,然後你退出了你的函數。所以,你從來沒有真正完成對整個列表的迭代。第二,您只需打印出您的物品,並根據您的要求,並根據您創建的名稱爲empty的列表,您希望收集這些數據並在完成後輸出。

有了這樣說,你想要做的,而不是有什麼改變你的print語句添加到您的列表:

empty.append(xs[i]) 

然後,當你完成你的環形折返空。

像這樣:

def multiples(n,xs): 
    empty = [] 
    for i in range(len(xs)): 
     if xs[i] % n == 0: 
      empty.append(xs[i]) 
    return empty 
+0

如果他正在返回'空',他可以推測它知道它是空的,並且打算如此。不要問我爲什麼,但這就是我的設想。 – zondo

2

你可以改變你的for循環到這一點:

print(",".join(str(x) for x in xs if not x % n)) 

生成表達式,做這一切。我假設您的return empty行只是縮進不正確,因爲在該縮進處,它只會打印第一個。

0

使用列表理解:

n = 2 
xs = [1, 2, 3, 4, 5, 6, 7] 
>>> [x for i, x in enumerate(xs, 1) if not i % n] 
[2, 4, 6] 

xs = [2, 3, 4, 5, 6, 7] 
>>> [x for i, x in enumerate(xs, 1) if not i % n] 
[3, 5, 7] 

n = 3 
xs = [11, 13] 

>>> [x for i, x in enumerate(xs, 1) if not i % n] 
[] 

這導致整數,而不是字符串列表。

正如你想從你的列表中獲取每一個第n項,你需要使用enumerate(從1開始)。該解決方案剛好正常工作,因爲該列表是一個連續的範圍。嘗試xs = [3, 3, 3, 3],看看你的功能和其他解決方案會發生什麼...

爲了幫助理解發生了什麼,這裏是一個臨時值表。

i x i % 2 not i % 2 
    == == ===== ========= 
    1 3  1  False 
    2 3  0  True 
    3 3  1  False 
    4 3  0  True