python - 如何使用for循环返回列表的最后一个元素
问题描述
我需要根据这个列表从每一行中提取最后一个字符:
lst = [ '-ae-' , '-ap-' , '-vn-' , '-au-' , '-aw-' , '-be-' , '-bp-' , '-br-' , '-dz-' ]
这里是一个示例df['CN']
:
1: aes-sof-mar-goo-wh-en-ap-bro-sear-vn-loc
2: aes-br-mar-goo-ww-en-dz-bp-cen
3: aes-apt-au-goo-vn-en-br-bp
我使用了这段代码:
def param(df):
lst = ['-ae-','-ap-','-vn-','-au-','-aw-','-be-','-bp-','-br-', '-dz-']
for x in lst:
if x in df['CN']:
return x
df['budget'] = df.apply(param, axis=1)
我需要返回列表中看到的最后一个元素:
1: -vn-
2: -bp-
3: -bp-
但我的代码返回了每行交叉的第一个元素:
1: -ap-
2: -br-
3: -au-
解决方案
用于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
在有意义时返回:
def param(df):
lst = ['-ae-','-ap-','-vn-','-au-','-aw-','-be-','-bp-','-br-', '-dz-']
pos = [(rfind(df, x), x) for x in lst]
if not pos: return None
m = max(pos)
if m[0] == -1: return None
return m[1]
推荐阅读
- java - Array Try Catch 无法识别 if 语句中的数组长度
- android - 将图像从 Angular 8 和 NativeScript 上传到 Rails ActiveStorage
- python - Win32com、Python 和 AutoCAD 的变体错误
- angular - Angular 应用程序 url 显示一个“#”,有没有办法删除它?
- java - 是否可以定义 Collection 的非泛型子类?
- python - Python 创建的标签 - 按 ID 更新文本
- ios - 当我运行我的应用程序时,它不会注册用户位置,但是当我在调试器中更改位置时,它会开始正常注册它
- python - 使用 networkx 创建确定性图
- sed - 如何在 sed 的列中获取字符串?
- sqoop - Sqoop 在似乎存在且具有正确权限的表上抛出“表或视图不存在”