在Python中,如何更改列表中的值以满足特定条件

时间:2015-02-04 15:41:37

标签: python

在Python中,我有几个看起来像以下变体的列表:

[X,1,2,3,4,5,6,7,8,9,X,11,12,13,14,15,16,17,18,19,20]
[X,1,2,3,4,5,6,7,8,9,10,X,12,13,14,15,16,17,18,19,20]
[0,X,2,3,4,5,6,7,8,9,10,11,X,13,14,15,16,17,18,19,20]

X可以落在任何地方。我有一个标准,我放了一个X,但它对这个例子并不重要。这些数字总是在X周围/通过X连续。

我需要重新编号这些列表以满足某个标准 - 一旦有X,数字需要重置为零。每个X ==一个重置。每个X都需要变为零,并且从那里开始计数到下一个X.结果我想要:

[0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,10]
[0,1,2,3,4,5,6,7,8,9,10,0,1,2,3,4,5,6,7,8,9]

似乎某种类型的列表理解或生成器可以帮助我,但我无法做到。

我是新生和学习 - 感谢您的耐心和善意。 : - )

编辑:我正在遭受挫折,就像我在reddit或其他什么地方重新发布一样。我想成为一个好公民 - 是什么让我失望?我没有显示代码?问题不明确?帮助我变得更好谢谢!

2 个答案:

答案 0 :(得分:1)

假设现有的价值并不重要,这将起作用

def fixList(inputList, splitChar='X'):
    outputList = inputList[:]
    x = None 
    for i in xrange(len(outputList)):
        if outputList[i] == splitChar:
            outputList[i] = x = 0 
        elif x is None:
            continue 
        else:
            outputList[i] = x 
            x += 1
    return outputList

例如

>>> a = ['X',1,2,3,4,5,6,7,8,9,'X',11,12,13,14,15,16,17,18,19,20]
>>> fixList(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> b = ['y',1,2,3,4,5,6,7,8,9,10,'y',12,13,14,15,16,17,18,19,20]
>>> fixList(b, splitChar='y')
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

编辑:已修复为列表不以X或0,1,2开头的实例的帐号...

答案 1 :(得分:-1)

将字符串'X'用作Xthe_list作为列表:

 [0 if i == 'X' else i for i in the_list]

这将返回已过滤的列表。