標籤(空格分隔): python
需求:把list
所有成員元素加倍。
普通的方式:
bag = [1,2,3,4,5]
for i in range(len(bag)):
bag[i] = bag[i] * 2
優雅的方式:
bag = [1,2,3,4,5]
bag = [elem * 2
for elem in bag]
普通的方式:
bag = [1,2,3,4,5]
for i in range(len(bag)):
print(bag[i])
優雅的方式:
bag = [1,2,3,4,5]
for i in bag:
print(i)
如果需要顯示列表的索引,則可用以下方式:
bag = [1,2,3,4,5]
for index, element in enumerate(bag):
print(index, element)
普通的方式:
a = 5
b = 6
#交換a和b
tmp = a
a = b
b = tmp
優雅的方式:
a = 5
b = 6
#交換a和b
a, b = b, a
普通的方式:
bag =
for _ in range(10):
優雅的方式:
bag = [0] * 10注意:如果列表包含的列表,這樣就產生了淺拷貝。
舉個栗子:
bag_of_bags = [[0]] * 5
#[[0], [0], [0], [0], [0]]
bag_of_bags[0][0] = 1
#[[1], [1], [1], [1], [1]]
所有元素都被改變了,而我們只想改變第乙個列表。
正確的方法:
bag_of_bags = [[0] for _ in range(5)] #[[0], [0], [0], [0], [0]]
bag_of_bags[0][0] = 1
#[[1], [0], [0], [0], [0]]
普通的方式:
name = "raymond"
age = 22
born_in = "oakland, ca"
string = "hello my name is " + name + "and i'm " + str(age) + " years old. i was born in " + born_in + "."
print(string)
優雅的方式:
name = "raymond"
age = 22
born_in = "oakland, ca"
string = "hello my name is and i'm years old. i was born in .".format(name, age, born_in)
print(string)
python允許你在乙個函式中返回多個元素,這讓生活更簡單。
普通的方式:
def
binary
():return
0, 1
result = binary()
zero = result[0]
one = result[1]
優雅的方式:
def
binary
():return
0, 1
zero, one = binary()
你也會經常給dicts
中寫入key,pair(鍵,值)
。
如果你試圖訪問乙個不存在的於dict
的key
,可能會為了避免keyerror
錯誤,你會傾向於這樣做:
countr = {}
bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]
for i in bag:
if i in countr:
countr[i] += 1
else:
countr[i] = 1
for i in range(10):
if i in countr:
print("count of {}: {}".format(i, countr[i]))
else:
print("count of {}: {}".format(i, 0))
優雅的方式:
countr = {}
bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]
for i in bag:
countr[i] = countr.get(i, 0) + 1
for i in range(10):
print("count of {}: {}".format(i, countr.get(i, 0)))
當然你也可以用setdefault來代替。
還有乙個更簡單卻多費點開銷的辦法:
bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]
countr = dict([(num, bag.count(num)) for num in bag])
for i in range(10):
print("count of {}: {}".format(i, countr.get(i, 0)))
你也可以用dict推導式
:
countr =
這兩種方法開銷大,因為它們在每次count
被呼叫時都會對列表遍歷。
現有的庫,直接匯入使用好了。
from collections import counter
bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]
countr = counter(bag)
for i in range(10):
print("count of {}: {}".format(i, countr[i]))
你可以指定start
的點和stop
點,就像這樣list[start:stop:step]
。我們取出列表中的前5個元素:
bag = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for elem in bag[:5]:
print(elem)
這就是切片,我們指定stop點是5,再停止前就會從列表中取出5個元素。
要是最後5個元素怎麼做?
bag = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for elem in bag[-5:]:
print(elem)
如果想對列表中元素間隔操作,你可以這樣做:
bag = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for index, elem in enumerate(bag):
if index % 2 == 0:
print(elem)
更優雅的方式:
bag = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for elem in bag[::2]:
print(elem)
# 或者用 ranges
bag = list(range(0,10,2))
print(bag)
這就是列表中的步進。list[::2]
意思是遍歷列表同時兩步取出乙個元素。
你可以用list[::-1]
很酷的翻轉列表。
英文原文:the python way: 10
其他文件:the python way part two: 10 more tips
python list comprehensions: explained visually
Python優雅技巧
不要這麼做 i 0 foritem in iterable print i,item i 1而是這樣 for i,item in enumerate iterable print i,itemenumerate可以接受第二個引數,例如 list enumerate abc 0,a 1,b 2,c l...
Go程式設計技巧 Goroutine的優雅控制
原文 go程式設計技巧 goroutine的優雅控制 goroutine是go語言最重要的機制,goroutine將複雜的需要非同步的io呼叫抽象成同步呼叫,符合人類正常的順序思維,極大的簡化了io程式設計的難度。如同執行緒一樣,對goroutine既要掌握基本的用法,更要很好的控制goroutin...
Python程式設計技巧
python 字典中使用了 hash table,因此查詢操作的複雜度為 o 1 而 list 實際是個陣列,在 list 中,查詢需要遍歷整個 list,其複雜度為 o n 因此對成員的查詢訪問等操作字典要比 list 更快。set 的 union,intersection,difference ...