Python3的奇葩语法


环境说明

系统:win10
平台:python3

注:python3很多和python2不同。大部分返回list的函数不在返回list,而是返回一个支持遍历的对象,比如map、fiter之类的


一、数组按固定间隔划分成元包

1
2
3
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
aaa = [arr[k:k + 2] for k in range(0, 9, 2)]
print(aaa)

输出结果:

1
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]


二、两个数组合并成元包

使用方式和python2不同

1
2
3
4
5
arr1 = [1, 2, 3]
arr2 = (4, 5, 6)
zipped = zip(arr1, arr2)
for x in zipped:
print(x)

输出结果:

1
2
3
(1, 4)
(2, 5)
(3, 6)


三、数组倒叙输出

1
2
arr1 = [1, 2, 3, 4]
print(arr1[::-1])

输出结果:

1
[4, 3, 2, 1]

我试了-2,-3,只有-1有效,说明是个特殊语法。而对于输入1,则是正序输出,输入2,3,4等没有输出。


四、数组倒叙选择输出

想不到更好的名字了

1
2
arr1 = [1, 2, 3, 4]
print(arr1[:-1])

输出结果:

1
[1, 2, 3]

相当于去掉了最后一个字符,如果是-2,则去掉最后两个字符。


五、矩阵相乘dot

dot矩阵相乘非常奇葩,格式为dot(a,b)
当a,b为单个常数时,输出a*b
当b为一为矩阵时,是向量相乘,不懂?看例子1
当a和b都是二维或者二维以上的矩阵时,为正常矩阵相乘,见例子2

  • 例一
1
2
3
4
5
6
import numpy as np

arr1 = [[5, 6, 7, 8],[10,11,12,13],[10,11,12,13]]
arr2 = [1, 2, 3, 4]

print(np.dot(arr1,arr2))

输出结果:

1
[ 70 120 120]

  • 例二
1
2
3
4
5
6
import numpy as np

arr1 = [[5, 6],[10,11]]
arr2 = [[1, 2],[12,13]]

print(np.dot(arr1,arr2))

输出结果:

1
2
[[ 77  88]
[142 163]]


六、链表函数list

这里只讲小细节
例1

1
2
3
4
a = ["asdf","hgff"]
b = a
b[1] = "aas"
print(a)

输出结果:

1
['asdf', 'aas']

可以看到,修改b之后,a的值跟着改变了。这个结果表明a只是将自身的指针赋值给了b,他们俩指的是同一块内存(c语言的说法),如果我想要改变b而不想修改a怎么办,如下使用list开辟一个新的链表空间。
例1

1
2
3
4
a = ["asdf","hgff"]
b = list(a)
b[1] = "aas"
print(a)

输出结果:

1
['asdf', 'hgff']


-------------本文结束感谢您的阅读-------------
0%