python-3.x - 使用列表推导从列表中创建字符串
问题描述
我正在尝试从以下给定列表中创建一个用逗号分隔的字符串
['D:\\abc\\pqr\\123\\aaa.xlsx', 'D:\\abc\\pqr\\123\\bbb.xlsx', 'D:\\abc\\pqr\\123\\ccc.xlsx']
新字符串应仅包含如下文件名,以逗号分隔
'aaa.xlsx,bbb.xlsx,ccc.xlsx'
我已经使用下面的代码实现了这一点
n = []
for p in input_list:
l = p.split('\\')
l = l[len(l)-1]
n.append(l)
a = ','.join(n)
print(a)
但是,我不想使用多行代码,而是想使用列表理解或正则表达式在单行中实现这一点。
提前致谢...
解决方案
简单地做一个
main_list = ['D:\\abc\\pqr\\123\\aaa.xlsx', 'D:\\abc\\pqr\\123\\bbb.xlsx', 'D:\\abc\\pqr\\123\\ccc.xlsx']
print([x.split("\\")[-1] for x in main_list])
输出:
['aaa.xlsx', 'bbb.xlsx', 'ccc.xlsx']
如果你想得到这个字符串,只需做一个
print(",".join([x.split("\\")[-1] for x in main_list]))
输出:
aaa.xlsx,bbb.xlsx,ccc.xlsx
另一种方法是:
print(",".join(map(lambda x : x.split("\\")[-1],main_list)))
输出:
aaa.xlsx,bbb.xlsx,ccc.xlsx
确实看到os.path.basename是依赖于操作系统的,并且可能会在跨平台脚本上产生问题。
推荐阅读
- angular - 在 Angular 7 注册表单错误处理中出现错误,例如缺少电子邮件@
- node.js - NodeJS 12.x:AWS Greengrass 中未找到错误
- sqlite - 如何在 Ubuntu 18.04 上安装或升级到 sqlite 3.33.0?
- apostrophe-cms - 如何强制撇号 cms 中的页面树?
- python - 如何绘制在 Y 轴上显示总人口百分比的分布曲线
- swift - ForEach onDelete 不适用于 LazyVStack
- c# - 使用 Winforms 使用 Combobox 绑定空值
- python - 从烧瓶函数内部返回值
- python - 将列添加到数组
- scala - 性能:Vector vs ArrayBuffer vs Array