2016-11-23 106 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加批准;) –

相关问题