python中的“坑”—持续更新

1.判断是否是回文

def is_back(s):
    return s[::-1]==(s if s.strip() else False)
print(is_back('上海自来水来自海上'))
print(is_back('山东落花生花落东山'))
print(is_back('山西悬空寺空悬西山'))
print(is_back('随随便便写的'))

 2.看下面这段代码, 具体是什么意思呢

1 nums=[1,1,1,2,2,3,4,5,6,6,7,8]
2 for n in nums:
3     if n%2==0:
4         nums.remove(n)
5 print(nums)

如果光看这段代码觉得print出来的结果应该是把除2余0的数删除,name结果应该是1,1,1,3,5,7,8,但运行结果如下:

/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 /Users/panyang/PycharmProjects/untitled/day9/111.py
[1, 1, 1, 2, 3, 5, 6, 7]

Process finished with exit code 0

好像和我们想象的并不一样,这是什么原因呢,因为在删除数组元素的过程中数组元素的下标也改变了,取完下标为3的之后下一个元素的下表变成了3,所以下标就不准了.删除的元素也就不准了.

所以循环列表的时候不要删元素,如果还是想删就用深拷贝,实现代码如下:

1 import copy
2 nums=[1,1,1,2,2,3,4,5,6,6,7,8]
3 new_nums=copy.deepcopy(nums)
4 for n in new_nums:
5     if n%2==0:
6         nums.remove(n)
7 print(new_nums)
8 print(nums)

显示的结果如下:

D:pythonpython.exe E:/Users/panyang/PycharmProjects/practice/day9/联系.py
[1, 1, 1, 2, 2, 3, 4, 5, 6, 6, 7, 8]
[1, 1, 1, 3, 5, 7]

Process finished with exit code 0
原文地址:https://www.cnblogs.com/panpan0301/p/7150249.html