Python 3.x 如果另一个列表中的两个项目连续出现,如何向列表中添加字符?python

Python 3.x 如果另一个列表中的两个项目连续出现,如何向列表中添加字符?python,python-3.x,dataframe,Python 3.x,Dataframe,我有一个数据框,其中每个单元格都包含一个列表。我有一个函数,目的是根据条件在每个列表中插入一个“1”。然而,我的代码并没有达到我期望的效果 每个列表由两个其他列表中的元素组成:(1)成员列表(2)非成员列表。我的目标是,当任何“成员”后面跟着任何两个非成员时,将数字“1”插入s。最多应在s中添加一个“1”。这是代码 import pandas as pd members = ['AA', 'BBB', 'CC', 'DDDD'] non_members = ['EEEE', 'FF', 'GG

我有一个数据框,其中每个单元格都包含一个列表。我有一个函数,目的是根据条件在每个列表中插入一个“1”。然而,我的代码并没有达到我期望的效果

每个列表由两个其他列表中的元素组成:(1)成员列表(2)非成员列表。我的目标是,当任何“成员”后面跟着任何两个非成员时,将数字“1”插入
s
。最多应在
s
中添加一个“1”。这是代码

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']
到那里最简单的方法是什么


上述问题与此相关:

有了此问题,您的答案是通过以下方式更改函数
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

您的问题是您在
func

@twhale中混合了
str
list
类型。正如你所说,你是初学者,我建议你看看如何使用熊猫的强大功能,在单元格中列出一个列表并不是最好的方法,用面具回答你的相关问题可能会更快。因为这种方法是可行的,但如果你接触到大数据集,那么可能需要一段时间:)非常感谢,还有很多事情我不明白,但我也会通过熊猫来努力,谢谢你的提示!