几个有意思的python小技巧

1. 布尔值下标
在Python里面,bool值True/False对应的整数值为1/0,比如我们可以这么测试:

>>> True is 1
False
>>> True == 1
True
>>> False is 0
False
>>> False == 0
True
>>> True == 2 #True is just 1
False

这样我们可以有很多有意思的problem solution。

#打印a是奇数还是偶数
print ("a is odd", "a is even")[a % 2 == 0] 

#将list中转化成奇偶表示
my_list = [1, 7, 11, 8, 13, 2]
[("odd","even")[i % 2 == 0] for i in my_list] 

#给定threshold规格化一些数据
thresholded_data = [(0,1)[i > threshold] for i my_list]

2. Dictionary.get()方法
这是一个内建方法:

>>> numbers = {1: 'one', 2:'two', 3:'three'}
>>> print numbers.get(1, 'Number not defined')
one
>>> print numbers.get(4, 'Number not defined')
Number not defined

我们可以用它来做字母计数:

my_string = "I want to get the counts for each letter in this sentence"
counts = {}
for letter in my_string:
    #在这里如果letter不存在则新建一个,并赋值1,若存在则+1,省去判断是否存在的if语句了
    counts[letter] = counts.get(letter, 0) + 1 
print counts

3. enumerate,for循环中获取一个index
其实这个就像C中正常的for语句中定义一个int i,以前不知道的是它是可以指定一个初始值的。

a = ['two', 'three', 'four']
for i, word in enumerate(a, 2):
  print i, word
# output:
# 2 two
# 3 three
# 4 four

4. zip函数
遍历两个list
原始方法可以这样:

for i, x in enumerate(list1):
    print x, list2[i]

zip方法:

for (i, j) in zip(list1, list2):
    print i, j

zip的逆(加一个*):

z = zip(list1, list2)
newlist1, newlist2 = zip(*z)

#将(a, 1), (b, 2), (c, 3)变成(a, b, c), (1, 2, 3)
rows = [(a, 1), (b, 2), (c, 3)]
columns = zip(*rows)
Tags : ,

3 thoughts on “几个有意思的python小技巧”

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Click the right image To submit your comment: