首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >操作Python列表中的元素

操作Python列表中的元素
EN

Stack Overflow用户
提问于 2018-07-29 06:12:50
回答 2查看 71关注 0票数 1

我有一个奇怪的需求,我需要根据某些规则来操作列表的内容。

我的列表如下:

代码语言:javascript
复制
lst = [
    '%s###timestamp', 
    "TRANSLATE(%s, ',', '')###sales", 
    "TRANSLATE(%s, ',', '')###units", 
    "TRANSLATE(%s, ',', '')###counting_units", 
    "TRANSLATE(%s, ',', '')###standard_units"]

根据要求,每个'%s‘都必须替换为'SPLIT(expld )’,最终结果如下:

代码语言:javascript
复制
res = [
    """SPLIT(expld, "###")[0] AS timestamp""", 
    """TRANSLATE(SPLIT(expld, "###")[1], ',', '') AS sales""", 
    """TRANSLATE(SPLIT(expld, "###")[2], ',', '') AS units""", 
    """TRANSLATE(SPLIT(expld, "###")[3], ',', '') AS counting_units""", 
    """TRANSLATE(SPLIT(expld, "###")[4], ',', '') AS standard_units"""] 

其中,1,2等表示列表的索引。

为什么我需要创建这样的'res‘,因为我需要这个列表来构造一个配置单元查询。

到目前为止,在我的尝试中,我已经能够将'%s‘值替换为'SPLIT(expld )’,这很简单。

代码语言:javascript
复制
splitExpr = [w.replace('%s', 'SPLIT(expld ') for w in lst]

在这种情况下,我仍然在试图弄清楚如何才能得到想要的结果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-29 06:31:43

代码语言:javascript
复制
res = [w.replace('###', ' AS ').replace('%s', 'SPLIT(expld, "###")[{}]'.format(i)) for i, w in enumerate(lst)]

使用enumerate函数同时获取索引和字符串。在你建议的拆分之前,我还把'###‘替换成了’AS‘。

像这样的列表理解是简洁的,但您可以考虑使用常规的for循环来获得更具可读性的代码。

票数 3
EN

Stack Overflow用户

发布于 2018-07-29 06:48:51

您也可以尝试range方法-

代码语言:javascript
复制
[x[i].replace("TRANSLATE(%s, ',', '')###", "TRANSLATE(SPLIT(expld, \"###\"[{}],',', '') AS ".format(i)) if "TRANSLATE" in x[i] else x[i].replace("%s###","SPLIT(expld, \"###\")[{}] AS ".format(i)) for i in range(len(x))]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51575647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档