今天尝试了下使用几何推导式优化原有的代码,使其pythonic一些,瞬间感觉高大上了
程序逻辑是从两个csv中读出数据,每行读到是一个list,需要统计这两个csv读到的所有list的前两项组成的list有多少不重复记录。很明显,让我们用set去统计唯一值,原来的写法是这样的
tel_set = set()
for text in texts:
tel_set.add(text[0])
tel_set.add(text[1])
for call in calls:
tel_set.add(call[0])
tel_set.add(call[1])
print(len(tel_set))
很符合正常的思维逻辑
而使用集合推导式处理过pythonic是这样
tel_set = {item for item_list in (texts + calls) for i, item in enumerate(item_list) if i < 2}
print(len(tel_set))
是不是高大上很多~~
这里有几点要说明,集合(set)推导式使用与列表推导式相同,只是把[]换成了{},本例使用了list的运算list1+list2的结果是这两个list的合集。另外,也使用了enumerate函数,它是一个迭代器,在循环时返回下标,这里这需要统计前两项,因此用来判断下标是否在列表的前两项