Эффективно заменить элемент, если в питоне критерии fullfil - PullRequest
0 голосов
/ 07 октября 2018

есть эффективный способ заменить элемент в списке.Например, я хочу заменить «банан» на 3

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

thislist[thislist == "banana"] = 3

. Используя приведенный выше код вместо банана, 1-я строка, соответствующая яблоку, изменяется на int 3.

Будет интересно, если мы сможем пропустить использование FOR-LOOP

Действительно ценю, если кто-то может указать правильное направление

Ответы [ 3 ]

0 голосов
/ 07 октября 2018

Чтобы избежать цикла for, вы можете попробовать использовать метод index () списка следующим образом: i = thislist.index ('banana') thislist [i] = 3

0 голосов
/ 07 октября 2018

Когда у нас есть решение numpy, у нас почти всегда есть решение с версией pandas, просто К вашему сведению.

import pandas as pd

thislist = ["apple", "banana", "cherry", "banana", "banana"]
newlist = pd.Series(thislist)
newlist[newlist=="banana"] = 3
print(newlist.tolist())

Вывод:

['apple',3, «вишня», 3, 3]

0 голосов
/ 07 октября 2018

вы можете использовать enumerate, чтобы получить индекс текущего элемента в вашем списке:

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

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

, чтобы объяснить, что происходит в вашем коде:

  • thislist == "banana" всегда False (сравнение str с list)
  • 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...