python从列表中的字符串中删除空格

时间:2012-10-25 14:40:14

标签: python list

我有一份清单清单。我想从它们中删除前导和尾随空格。 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

6 个答案:

答案 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(网络)