在Python列表中操作元素

时间:2018-07-28 22:12:50

标签: python list replace

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

我的列表如下:

lst = [
    '%s###timestamp', 
    "TRANSLATE(%s, ',', '')###sales", 
    "TRANSLATE(%s, ',', '')###units", 
    "TRANSLATE(%s, ',', '')###counting_units", 
    "TRANSLATE(%s, ',', '')###standard_units"]

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

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"""] 

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

为什么需要创建像这样的“ res”,因为以后需要这个列表来构造一个Hive查询。

到目前为止,我已经能够用'SPLIT(expld')替换'%s'值,这很简单。

splitExpr = [w.replace('%s', 'SPLIT(expld ') for w in lst]

在这种情况下,我仍在尝试如何获得所需的结果。

2 个答案:

答案 0 :(得分:3)

res = [w.replace('###', ' AS ').replace('%s', 'SPLIT(expld, "###")[{}]'.format(i)) for i, w in enumerate(lst)]

使用enumerate函数同时获取索引和字符串。在您建议的拆分之前,我还用“ AS”替换了“ ###”。

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

答案 1 :(得分:0)

您还可以尝试使用range方法-

[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))]