2016-11-23 107 views
0

現在,我正在努力尋找合適的答案。假設我們有這個列表:如何在滿足條件時替換列表中的元素

['12', '50', '12', '7', '7', '3', '4', '10', '19', '12'] 

正如你所看到的,它是一個字符串列表。我可能映射此列表ints,但我不會,因爲我需要將它們改回字符串。另一方面,如果我能做到這一點很方便,因爲我需要檢查一個條件。

我需要什麼? - >我需要在滿足特定條件時更改列表中的元素。因此,舉例來說:如果在元素列表大於10,我需要的元素更改爲某個角色就像一個plus (+)minus (-)

最後,我的名單應該是這樣的:

['+', '+', '+', '-', '-', '-', '-', '+', '+', '+'] 

所以,在我的腦海中的概念現在的問題是:

  • 不要將字符串轉換爲int,因爲我需要將其轉換爲字符串反正(因此特別我是說人物關於)。

  • 我需要使用一個for loop,因爲我要檢查每一個元素

我可能會需要使用像這樣的循環:

for score in scores: 
    if score == "5": # check if element is a 5 
     score == "+" # make it a plus 
    else: 
     score == "-" # make it a minus 

問題:這不起作用,我甚至不知道這是否正確。我可以使用score[0]並像這樣得到列表中的每個元素,但這不會是有效的,也不是通用的,還是會呢?滿足特定條件時,轉換列表中元素的最佳方式是什麼?

有人能指出我的正確方向嗎?

回答

7

試試這個(假設你要10爲分界)

li = ['12', '50', '12', '7', '7', '3', '4', '10', '19', '12'] 

new_list = ['+' if int(el)>10 else '-' for el in li] 
+0

這假定OP不需要對現有列表進行更改。 –

+0

不完全是新手友好的,但這是做到這一點的方法。 –

+0

但這不是通用的?如果我的名單會改變會發生什麼?我不喜歡非通用的解決方案,但是非常感謝! – Siyah

1

它不起作用,因爲:

  1. 一個for循環Python中創建一個新的局部變量,並

  2. 您使用==代替=

試試這個辦法:

for index, score in enumerate(scores): 
    if scores[index] == "5": # check if element is a 5 
     scores[index] = "+" # make it a plus 
    else: 
     scores[index] = "-" # make it a minus 

邊注:你的問題問的 「大/小」,然後,但你的例子使用==。如果你想測試更大或更小,你必須將元素轉換爲int

+0

'i'與'index'不是一回事。如果你不打算使用提取的值,那麼使用'enumerate'有什麼意義? –

+0

@ScottHunter謝謝,修正了 – DeepSpace

+1

你不用'score',所以'enumerate'不是nedt。 '用於範圍內的索引(len(分數)):' – Adirio

1

你可以這樣做:

  1. 初始l = ['12', '50', '12', '7', '7', '3', '4', '10', '19', '12']
  2. 地圖爲int:l = list(map(int, l))
  3. 然後:a = ['+' if i>10 else '-' for i in l]
  4. a = ['+', '+', '+', '-', '-', '-', '-', '-', '+', '+']
+0

這假定OP不需要對現有列表進行更改。 –

+0

實際上,你可以在一行中執行'l = ['+'if i> 10 else' - 'for i in map(int,l)]' – Adirio

+0

Ya kinda意識到通過看到第一篇文章。顯然1分鐘== 6 upvotes加批准;) –

相關問題