如何使用for循环返回列表的最后一个元素

2024-04-29 08:37:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要根据以下列表从每行中提取最后一个字符:

lst = [ '-ae-' , '-ap-' , '-vn-' , '-au-' , '-aw-' , '-be-' , '-bp-' , '-br-' , '-dz-' ]

这里是df['CN']的示例:

^{pr2}$

我用了这个代码:

^{3}$

我需要返回列表中最后一个元素:

1: -vn-
2: -bp-
3: -bp-

但是我的代码返回了每行交叉的第一个元素:

1: -ap-
2: -br-
3: -au-

Tags: 代码br元素df列表be字符ap
3条回答

Pandas方式,使用^{}^{}

pat=r'(?=({}))'.format('|'.join(re.escape(x) for x in lst))# @thanks Amadan
#'(?=(\\-ae\\-|\\-ap\\-|\\-vn\\-|\\-au\\-|\\-aw\\-|\\-be\\-|\\-bp\\-|\\-br\\-|\\-dz\\-))'
df['CN'].str.findall(pat).str[-1]

^{pr2}$

使用np.in1d

l = [i.replace('-','') for i in lst]
df['CN'].apply(lambda x: '-'+ np.array(l)[np.in1d(l,x.split('-'))][-1] + '-')

输出

^{pr2}$

使用rfind查找最右边的匹配项。使用max查找最右边的出现。此代码假定至少会找到一个lst成员;如果找不到,它仍将返回一个lst成员。在

def param(df):
    lst = ['-ae-','-ap-','-vn-','-au-','-aw-','-be-','-bp-','-br-', '-dz-']
    return max(lst, key=lambda x: rfind(df, x))

这较长,但在有意义时将返回None

^{pr2}$

相关问题 更多 >