如果在python中使用fullfil标准,则有效替换元素

时间:2018-10-07 06:47:04

标签: python performance replace

是替换列表中元素的有效方法。 例如,我想将“香蕉”替换为3

thislist = ["apple", "banana", "cherry", "banana", "banana"]

thislist[thislist == "banana"] = 3

通过执行上述代码,将与Apple对应的第一行(而不是香蕉)更改为int 3。

如果我们可以跳过对FOR-LOOP的使用,将会很有趣

真的很感谢有人可以指出正确的方向

3 个答案:

答案 0 :(得分:2)

您可以使用enumerate来获取列表中当前项目的索引:

thislist = ["apple", "banana", "cherry", "banana", "banana"]

for i, fruit in enumerate(thislist):
    if fruit == 'banana':
        thislist[i] = 3

解释代码中发生的事情:

  • thislist == "banana"始终为False(将strlist进行比较)
  • thislist[False] == thislist[0](作为False == 0
  • thislist[0] = 3:您只设置了第一个元素。

如果您想使用numpy,则可以不使用(显式)for循环(尽管不是在纯Python中...)

import numpy as np

a = np.array(["apple", "banana", "cherry", "banana", "banana"])
a[a == 'banana'] = 3

请注意,只能用一个for循环完成多次替换:

repl = {'banana': 3, 'cherry': 5}

for i, fruit in enumerate(thislist):
    if fruit in repl:
        thislist[i] = repl[fruit]

print(thislist)

答案 1 :(得分:1)

为避免for循环,可以尝试使用列表的index()方法,如下所示:     我= thislist.index('banana')     此列表[i] = 3

答案 2 :(得分:1)

有了SELECT * FROM tbl_name WHERE DAYOFMONTH(date_column) = 0 OR MONTH(date_column) = 0 ORDER BY ID 解决方案时,几乎总是有numpy版本的解决方案,仅供参考。

pandas

输出:

  

['apple',3,'cherry',3,3]