關於Python,可能有很多的初學者還沒有什麼概念!但是Python確實是一個非常容易學習的膠水語言,爲了增加大家學習的樂趣,我們先來看看Python的一些小技巧。
一、交換兩個變量的值。
在Python裏面交換變量的值,不需要像C語言一下用異或操作,並且只需要一行就搞定了。
a, b = 1, 2
a, b = b, a
二、多個變量賦值。
在Python對多個變量進行賦值是非常方便的,可以在一行內進行各種形式的賦值。
a, b, c = 1, 2, 3
a, b, c = [1, 2, 3]
a, b, c = (2 * i + 1 for i in range(3))
a, (b, c), d = [1, (2, 3), 4]
三、擴展賦值。
可以說Python的技巧是非常的令人愉悅的,比如說,如下這種賦值方式。大家可以猜測一下結果是什麼,然後實際去運行一下。
a, *b, c = [1, 2, 3, 4, 5]
四、列表中負的下標索引方式。
這種方式給我們的編程真的是給了諸多便利,和C語言的負的下標不一樣,Python將列表的首尾連接起來了,而C語言的負數下標則是按照內存的地址的偏移。
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a[-1]的值則爲10,a[-2]的值則爲9。
五、列表切片。
列表切片功能很多同學應該用的比較多了,確實是一項非常使用的功能。
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a[2:8]的值爲[2,3,4,5,6,7]。
六、使用負的下標索引來切片。
既然列表可以使用負的索引,那麼肯定也可以使用負的索引來進行切片。比如:
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
其中a[-4:-2]的值爲[7,8]。
七、列表切片時使用步長。
使用步長可以讓Python對列表進行切片時跳過其中指定步長的值。
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a[::2]的結果爲[0, 2, 4, 6, 8, 10],而a[2:8:2]的結果爲[2, 4, 6]。
八、列表切片時使用負的切片。
同樣的我們在對列表切片時,可以使用負的步長。比如:
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
其中a[::-1]的值爲[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0],而a[::-2]的值爲[10, 8, 6, 4, 2, 0]。
九、對列表切片進行修改。
列表切片賦值可以很方便的去修改列表中的某一部分值。
a = [1, 2, 3, 4, 5]
a[2:4] = [0, 0]則a = [1, 2, 0, 0, 5],a[1:1] = [8, 9]則a = [1, 8, 9, 2, 3, 4, 5],a[1:-1] = []則a = [1, 5]。
十、對切片進行命名。
這類似於C語言裏面定義了一個宏,我們可以去取個名字方便我們實際使用的時候使用。
a = [0, 1, 2, 3, 4, 5]
LASTTHREE = slice(-3, None,None)
我們調用a[LASTTHREE]就可以達到slice同樣的效果,其結果爲[3, 4, 5]。
十一、枚舉列表中的索引和值。
a = ['Hello', 'world', '!']
for i, x in enumerate(a): print '{}: {}'.format(i, x)
其運行結果爲:
0: Hello
1: world
2: !
十二、枚舉字典中的key和value。
m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
for k, v in m.items(): print '{}: {}'.format(k, v)
其運行結果爲:
a: 1
c: 3
b: 2
d: 4
十三、拆分和重組列表。
a = [1, 2, 3]
b = ['a', 'b', 'c']
z = zip(a, b)的結果則爲z[(1, 'a'), (2, 'b'), (3, 'c')],如果再對z進行zip(*z),我們發現結果爲[(1, 2, 3), ('a', 'b', 'c')]。
十四、對列表進行分組。
a = [1, 2, 3, 4, 5, 6]
group_adjacent = lambda a, k: zip(*([iter(a)] * k))
我們使用group_adjacent(a, 3)的結果爲[(1, 2, 3), (4, 5, 6)],使用group_adjacent(a, 2)的結果爲[(1, 2), (3, 4), (5, 6)]。
十五、交換字典的key和value。
m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
dict(zip(m.values(), m.keys()))
其結果爲:{1: 'a', 2: 'b', 3: 'c', 4: 'd'}
十六、對列表進行降維。
a = [[1, 2], [3, 4], [5, 6]]
list(itertools.chain.from_iterable(a))
其結果爲:[1, 2, 3, 4, 5, 6]。
十七、構造一個生成器。
g = (x ** 2 for x in xrange(10))
next(g)的運行結果爲0,而如果我們再一次運行next(g),則結果爲1,如果繼續運行一次,則結果爲4。
十八、構造一個字典。
m = {x: x ** 2 for x in range(5)}
其運行結果爲:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}。
十九、用字典的方式來交換字典的key和value。
m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
{v: k for k, v in m.items()}
其結果爲:{1: 'a', 2: 'b', 3: 'c', 4: 'd'}。
二十、爲元組進行命名。
Point = collections.namedtuple('Point', ['x', 'y'])
p = Point(x=1.0, y=2.0)
那麼p.x的值爲1.0而p.y的值爲2.0。
二十一、給字典排序。
m = dict((str(x), x) for x in range(10))
我們可以看到其值爲:1, 0, 3, 2, 5, 4, 7, 6, 9, 8,它的順序是亂序的。如果我們使用如下的:
m = collections.OrderedDict((str(x), x) for x in range(10))
那麼值爲:0, 1, 2, 3, 4, 5, 6, 7, 8, 9,現在它是一個有秩序的字典了。
二十二、合併兩個字典。
x = {'a': 1, 'b': 2}
y = {'b': 3, 'c': 4}
z = {**x, **y}
其結果爲{'c': 4, 'a': 1, 'b': 3}
二十三、使用lambda來便捷創建函數。
add = lambda x, y: x + y
add(5, 3)
二十四、反轉一個字符串。
a = "abcdefgh"
print "Reverse is",a[::-1]
其結果爲:hgfedcba。
二十五、矩陣轉置。
mat = [[1, 2, 3], [4, 5, 6]]
zip(*mat)
其結果爲: [(1, 4), (2, 5), (3, 6)]。
二十六、字符串連接。
a = ['my', 'life', 'is', 'pure']
' '.join(a)
其結果爲:my life is pure。
二十七、字符串重複生成。
a = 'python'*5
其結果爲:pythonpythonpythonpythonpython
二十八、字符串轉爲數組。
a ="my life is brilliant"
result = map(lambda x:int(x) ,raw_input().split())
其結果爲['my', 'life', 'is', 'brilliant']。
二十九、多個條件不等式。
n = 10
result = 1 < n < 20
其結果爲:True。這是我們C程序員夢寐以求的寫法吧!
三十、找到列表裏出現頻率最高的值。
test = [1,2,3,4,2,2,3,1,4,4,4]
print(max(set(test), key=test.count))
這些小技巧可以看到Python的強大確實是可見一斑,當然Python的魅力不僅僅如此。當你進入Python的世界之後,你會發現它不同於其他語言,甚至對於完全沒有基礎的人,Python也非常的容易上手,並且極大的成爲你的工作的擴展。可以說各行各業的人都可以使用Python來幫助自己獲得更強的掌控力。
人工智能與深度學習做量化請關注:AI量化(https://t.zsxq.com/RvfY37y) 星球限時免費,如需加入,請私信我獲得免費邀請碼!
零基礎學習Python與深度學習應用請關注星球:Python與深度學習 https://t.zsxq.com/bUFayZ3
微信公衆號:QTechAI