Python 关于列表迭代的问题
我尝试使用以下代码使用循环从字符串中删除一些特殊字符Python 关于列表迭代的问题,python,arrays,Python,Arrays,我尝试使用以下代码使用循环从字符串中删除一些特殊字符 def chk(arr): i=0 while i<len(arr): j=arr[i] if (ord(j)<65 or ord(j)>90) and (ord(j)<97 or ord(j)>122): if ord(j)==39: pass else:
def chk(arr):
i=0
while i<len(arr):
j=arr[i]
if (ord(j)<65 or ord(j)>90) and (ord(j)<97 or ord(j)>122):
if ord(j)==39:
pass
else:
arr.remove(j)
i+=1
st = "//wont won't"
arr=[]
arr[:0]=st
chk(arr)
print(arr)
def chk(arr):
i=0
虽然i您的循环无法正常工作,因为在向前迭代时删除一个元素会将所有下一个元素下移一个索引,因此每次都会跳过一个元素。删除后向后循环或递减索引将解决此问题
# Decrementing index after removing:
def chk(arr):
i=0
while i<len(arr):
j=arr[i]
if (ord(j)<65 or ord(j)>90) and (ord(j)<97 or ord(j)>122):
if ord(j)==39:
pass
else:
arr.remove(j)
i-=1
i+=1
# Looping backwards:
def chk(arr):
i=len(arr) - 1
while i >= 0:
j=arr[i]
if (ord(j)<65 or ord(j)>90) and (ord(j)<97 or ord(j)>122):
if ord(j)==39:
pass
else:
arr.remove(j)
i-=1
# Looping backwards with a for loop:
def chk(arr):
for i in range(len(arr) - 1, -1, -1):
j = arr[i]
if (ord(j)<65 or ord(j)>90) and (ord(j)<97 or ord(j)>122):
if ord(j)==39:
pass
else:
arr.remove(j)
#删除后递减索引:
def chk(arr):
i=0
当i=0时:
j=arr[i]
如果(作战需求文件(j)90)和(作战需求文件(j)122):
如果ord(j)==39:
通过
其他:
arr.remove(j)
i-=1
#使用for循环向后循环:
def chk(arr):
对于范围内的i(len(arr)-1,-1,-1):
j=arr[i]
如果(作战需求文件(j)90)和(作战需求文件(j)122):
如果ord(j)==39:
通过
其他:
arr.remove(j)
< /代码> 在迭代时修改一个列表通常会产生奇怪的结果,并且在上面,你的<代码>或 s和<代码>和 s看起来有点可疑,关于它们如何处理范围中间的字符;通过使用字符代码而不是实际字符来混淆所有内容是没有帮助的。我很确定你想要这样的东西:
>>> def chk(arr):
... arr[:] = [c for c in arr if c.isalpha() or c == "'"]
...
>>> st = "//wont won't"
>>> arr = list(st)
>>> chk(arr)
>>> print(arr)
['w', 'o', 'n', 't', 'w', 'o', 'n', "'", 't']
尽量不要在迭代列表时修改列表,或者至少有条件地更新索引。这也属于代码评审SE的更多内容。@LukeSawczak代码评审用于评审工作代码。