Как добавить символ в список, если два элемента из другого списка появляются последовательно?питон - PullRequest
0 голосов
/ 23 мая 2018

У меня есть DataFrame, в котором каждая ячейка содержит список.У меня есть функция, которая направлена ​​на вставку «1» в каждый список, на основе условия.Однако мой код не выполняет то, что я ожидаю.

Каждый список s состоит из элементов из двух других списков: (1) список участников (2) список не членов.Моя цель - вставить число «1» в s, если за любым «членом» следуют любые два последовательных «не члена».Максимум один '1' должен быть добавлен к s.Это код.

import pandas as pd

members = ['AA', 'BBB', 'CC', 'DDDD']
non_members = ['EEEE', 'FF', 'GGG', 'HHHHH', 'III', 'JJ']
s = ['AA', 'EEEE', 'GGG', 'FF']
df = pd.DataFrame({'string':[s]}) # each row of the column 'string' is a list

Итак, учитывая s:

['AA', 'EEEE', 'GGG', 'FF']

результат, которого я пытаюсь достичь, таков:

['AA', '1', 'EEEE', 'GGG', 'FF']

Этомой код:

d = df['string']

def func(row):
    out = ""
    look = 2
    for i in range(len(row)-look):
        out += row[i]
        if (row[i] in members) & \
           (row[i+1] in non_members) & \
           (row[i+2] in non_members):
            out += '1' + row[i+1:]
            break
    return out

e = d.apply(func)
print(e)

Это дает только следующий результат:

string    
dtype: object

Но я пытаюсь получить следующее:

['AA', '1', 'EEEE', 'GGG', 'FF']

Что самое простоеспособ туда добраться?

С этим связан вопрос выше: Как вставить символ в список, основываясь на последовательном появлении двух элементов из другого списка?Python

1 Ответ

0 голосов
/ 23 мая 2018

с этим вопросом, ваш ответ - изменить вашу функцию func на:

def func(row):
    look = 2
    for i in range(len(row)-look):
        if (row[i] in members) & \
           (row[i+1] in non_members) & \
           (row[i+2] in non_members):
            # if the condition is met, return the list with the 1 added where you want
            return row[:i+1] + ['1'] + row[i+1:]
    # in case you never met your condition, you return the original list without changes
    return row

Ваша проблема заключалась в том, что вы смешали str и list, набрав func

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...