0%

python应用中的遇到的一些点(随着遇到的问题持续更新)

最近在写python的时候发现了很多以前没有发现的问题,特此写一篇文章专门用来记录遇到的这些问题。其实也不能算是问题,算是一些语言方面的特性,比如和c/c++不一样的地方。

溢出判断

python的int是不会溢出的,达到界限后会自己转为long
https://blog.csdn.net/jiede1/article/details/84256507

对负数取余的写法,python和c++并不相同。如果想要取一个负数的每一位,c++和正数的写法一致,而python则有一些改变。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <cstdio>
#include <cstring>
#include <vector>
#include <iostream>

using namespace std;

int main(){
int x;
cin >> x;
vector<int> a;
while(x!=0){
int pop = x%10;
x = x/10;
a.push_back(pop);
}
for(int i=0;i<a.size();i++)
{
if (i!=a.size()-1)
cout<<a[i]<<" ";
else
cout<<a[i]<<endl;
}
return 0;
}
//x=123 输出3 2 1
//x=-123 输出-3 -2 -1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def get_single_num(x):
res=[]
while x!=0:
pop = x%10
x = x//10
res.append(pop)
print(res)

# 输出 3 2 1
get_single_num(123)

# 在python中 -123%10 = 7 -123//10 = -13
def get_single_num(x):
res=[]
while x!=0:
pop = x%-10
x = int(x/10)
res.append(pop)
print(res)

# 输出 -3 -2 -1
get_single_num(-123)
深拷贝、浅拷贝

更详细的讲解:https://blog.csdn.net/u010712012/article/details/79754132

python中copy并不是完全的深拷贝,对于嵌套多个list的情况,原始list发生改变copy的list也会发生改变。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
list1 = [1,2,[1,2]]
list2 = list1.copy()

list1[1] = 0
print(list1,list2)
# 输出[1, 0, [1, 2]] [1, 2, [1, 2]]

list1[2][0] = 0
print(list1,list2)
# 输出[1, 0, [0, 2]] [1, 2, [0, 2]]

list1[2].append(3)
print(list1,list2)
# 输出[1, 0, [0, 2, 3]] [1, 2, [0, 2, 3]]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 要实现完全的深拷贝要用deepcopy()
import copy
list1 = [1,2,[1,2]]
list2 = copy.deepcopy(list1)

list1[1] = 0
print(list1,list2)
# 输出[1, 0, [1, 2]] [1, 2, [1, 2]]

list1[2][0] = 0
print(list1,list2)
# 输出[1, 0, [0, 2]] [1, 2, [1, 2]]

list1[2].append(3)
print(list1,list2)
# 输出[1, 0, [0, 2, 3]] [1, 2, [1, 2]]
range和xrange的区别

简而言之:python3中没有xrange只有range了,但是python3中的range相当于python2中的range,是一个生成器对象。
详情请戳:https://blog.csdn.net/wtwcsdn123/article/details/89329403

iteritems

python3中不再有iteritems(),只有items(),items()返回的是一个列表,iteritems()返回的是迭代器,iteritems()在需要迭代结果的时候使用最适合,它的工作效率非常的高。