在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或其他什么地方重新发布一样。我想成为一个好公民 - 是什么让我失望?我没有显示代码?问题不明确?帮助我变得更好谢谢!答案 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'
用作X
和the_list
作为列表:
[0 if i == 'X' else i for i in the_list]
这将返回已过滤的列表。