我有一份清单清单。我想从它们中删除前导和尾随空格。 strip()
方法返回不带前导和尾随空格的字符串副本。单独调用该方法不会进行更改。通过此实现,我得到'array index out of bounds error'
。在我看来,列表中的每个列表(0-len(网络)-1)和“ay”对于这些列表中的每个字符串都会有“一个x”(0-len(networks [x])又名我和j应该准确地映射到合法的索引而不是超出范围?
i = 0
j = 0
for x in networks:
for y in x:
networks[i][j] = y.strip()
j = j + 1
i = i + 1
答案 0 :(得分:13)
在迭代完第一个列表后,您忘记将j
重置为零。
这就是为什么你通常不在Python中使用显式迭代的原因之一 - 让Python为你处理迭代:
>>> networks = [[" kjhk ", "kjhk "], ["kjhkj ", " jkh"]]
>>> result = [[s.strip() for s in inner] for inner in networks]
>>> result
[['kjhk', 'kjhk'], ['kjhkj', 'jkh']]
答案 1 :(得分:5)
您不需要自己统计i, j
,只需枚举,看起来也不会增加i
,因为它已经失控并且j
不在最内层的循环,这就是你有错误的原因
for x in networks:
for i, y in enumerate(x):
x[i] = y.strip()
另请注意,您不需要访问网络,但需要访问' x'并且替换值将起作用,因为x已经指向networks[index]
答案 2 :(得分:4)
这会生成一个新列表:
>>> x = ['a', 'b ', ' c ']
>>> map(str.strip, x)
['a', 'b', 'c']
>>>
修改:当您使用内置类型(string
)时,无需导入str
。
答案 3 :(得分:1)
所以您有类似[['a ', 'b', ' c'], [' d', 'e ']]
的内容,并希望生成[['a', 'b',' c'], ['d', 'e']]
。你可以这样做:
mylist = [['a ', 'b', ' c'], [' d', 'e ']]
mylist = [[x.strip() for x in y] for y in mylist]
通常没有必要使用带有列表的索引,并且在迭代时更改列表虽然它可能有多个不良副作用。
答案 4 :(得分:0)
c=[]
for i in networks:
d=[]
for v in i:
d.append(v.strip())
c.append(d)
答案 5 :(得分:0)
可以使用递归实现更清洁的清洁版本。这将允许您在列表中包含无限量的列表,同时保持代码的复杂性非常低。
附注:这也会进行安全检查以避免条带数据类型问题。这允许您的列表包含整数,浮点数等。
iris
然后只需使用您的列表调用该函数。所有值都将在列表列表中清除。
clean_list(网络)