Python 3.x 如果另一个列表中的两个项目连续出现,如何向列表中添加字符?python
我有一个数据框,其中每个单元格都包含一个列表。我有一个函数,目的是根据条件在每个列表中插入一个“1”。然而,我的代码并没有达到我期望的效果 每个列表由两个其他列表中的元素组成:(1)成员列表(2)非成员列表。我的目标是,当任何“成员”后面跟着任何两个非成员时,将数字“1”插入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
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
类型。正如你所说,你是初学者,我建议你看看如何使用熊猫的强大功能,在单元格中列出一个列表并不是最好的方法,用面具回答你的相关问题可能会更快。因为这种方法是可行的,但如果你接触到大数据集,那么可能需要一段时间:)非常感谢,还有很多事情我不明白,但我也会通过熊猫来努力,谢谢你的提示!