python小技巧

开坑,记录读书过程中看到的语句。

1、for items in set(a).difference(b) 遍历在集合a中且不在集合b中的元素

2、移动链表内部项目一种常用且可读的方式。

words = ['I', 'turned', 'off', 'the', 'light']
words[2], words[3], words[4] = words[3], words[4], words[2]
words
['I', 'turned', 'the', 'light', 'off']
3、all和any的使用

sent = ['good','bad','today','now']
all(len(val) > 4 for val in sent)
False
any(len(val) > 4 for val in sent)
True

4、nltk的FreqDist对象可以转换为list

text = nltk.word_tokenize(raw)
text
['red', 'ball', ',', 'yellow', 'ball', ',', 'grey', 'ball']
fdist = nltk.FreqDist(text)
fdist
FreqDist({'ball': 3, ',': 2, 'yellow': 1, 'red': 1, 'grey': 1})
list(fdist)
['yellow', 'ball', ',', 'red', 'grey']

5、可以合并列表或将列表转换为dict的zip

a =  [1,2,3]
b = ['a','b','c']
c = ['x','y','z']
zip(a,b,c)
[(1, 'a', 'x'), (2, 'b', 'y'), (3, 'c', 'z')]
a
[1, 2, 3]
b
['a', 'b', 'c']
dict(zip(a,b))
{1: 'a', 2: 'b', 3: 'c'}
6、循环列表的好帮手:enumerate

list(enumerate(a)) # a=[1,2,3]
[(0, 1), (1, 2), (2, 3)]
7、生成器yield

def search1(substring,words):
    result = []
    for word in words:
        if substring in word:
            result.append(word)
    return result

def search2(substring,words):
    for word in words:
        if substring in word:
            yield word

for i in search1('s',['nihao','nihaos','hhs','sda','df']):
    print i
for i in search2('s',['nihao','nihaos','hhs','sda','df']):
    print i
函数search2是一个生成器。第一次调用此函数时,它会运行到yield语句然后停下来。调用程序获得第一个词,并进行任何必要的处理。一旦调用程序对另一个词做好准备。函数会从之前停下来的地方继续执行,直到再次遇到yield语句。这种方法通常更加有效,因为函数只产生调用程序需要的数据,并不分配额外的内存在存储输入。

8、filter的用法

def is_content_word(word):
    return word.lower() not in ['a', 'of', 'the', 'and', 'will', ',', '.']

sent = ['Take', 'care', 'of', 'the', 'sense', ',', 'and', 'the', 'sounds', 'will', 'take', 'care', 'of', 'yourself']

filter(is_content_word,sent)

[w for w in sent if is_content_word(w)]
函数is_content_word检查一个词是否来自一个开放的实词类。将此函数作为filter()的第一个参数,此参数把这个函数应用到每个项目中,这些项目都包含在函数第二个参数的序列中,而且只在该函数返回True时保持不变。(filter语句与下方的列表推导式结果是一致的)
9、map的用法

sent = ['Take', 'care', 'of', 'the', 'sense', ',', 'and', 'the', 'sounds', 'will', 'take', 'care', 'of', 'yourself']

lengths = map(len,sent)

lengths = [len(w) for w in sent]
map跟filter一样是高阶函数,将一个函数运用到一个序列中的每一项。上面的两句都是求sent中每个词的长度。以链表推导为基础的解决方案通常比基于高阶函数的解决方案可读性更好,在使用中更受青睐。

10、使用itemgetter对字典按值排序

import operator

counts = {'n': 22226, 'det': 10648, 'np': 8336, 'p': 10845}

sorted(counts.items(), key=operator.itemgetter(1), reverse=True)

[('n', 22226), ('p', 10845), ('det', 10648), ('np', 8336)]

11、使用nltk的defaultdict指定字典的默认值

pos = nltk.defaultdict(lambda: 'N')
pos['color'] = 'adj'
pos['blog']
pos.items()
[('color', 'adj'), ('blog', 'N')]




你可能感兴趣的:(python)