python编程一些注意事项

strs & list

  • list有sort函数,是in place型的排序,但是strs没有sort函数,但是也可以对其排序,使用sorted()函数,排序方式是按照字母的ascii码。举个栗子:
>>> a=[5,3,6,2,1]
>>> a.sort() # 注意这个是in place替换
>>> a
[1, 2, 3, 5, 6]
>>>
# 如果想不是in place替换,怎么做呢?使用sorted()函数就可以了
>>> a=[5,3,6,2,1]
>>> a
[5, 3, 6, 2, 1]
>>> sorted(a)
[1, 2, 3, 5, 6]
>>> a
[5, 3, 6, 2, 1]
>>>

再来看一下strs,list.sort()是list的成员函数,不能将其用于strs的排序,但是sorted()函数对所有可迭代的对象进行排序操作。所以使用sorted()排序就好了。

>>> a="hello python"
>>> sorted(a)
[' ', 'e', 'h', 'h', 'l', 'l', 'n', 'o', 'o', 'p', 't', 'y']
>>>
# 如果想转换成list
>>> b=sorted(a)
>>> b
[' ', 'e', 'h', 'h', 'l', 'l', 'n', 'o', 'o', 'p', 't', 'y']
>>> c="".join(b)
>>> c
' ehhllnoopty'
>>>

数组逆序

  • Python中有一个非常好用的方法,可以直接对一个数组进行逆序,
>>> a=[5,4,2]
>>> a[::-1]
[2, 4, 5]
>>>

collections.defaultdict()可以节省很多代码

看个例子:

>>> a=dict()
>>> a['1'].append('nihao')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: '1'
>>> if '1' in a:
... a['1'].append('nihao')
... else:
... a['1']=['nihao']
...
>>> a
{'1': ['nihao']}
>>>

如果我们想往一个字典中的键中加入一个list,并在list中新增数据,直接append会报错,需要使用这个if语句判断是否这个键在字典中,而使用defaultdict可以怎么做呢?

>>> import collections
>>> a=collections.defaultdict(list)
>>> a
defaultdict(<class 'list'>, {})
>>> a['1'].append('nihao')
>>> a
defaultdict(<class 'list'>, {'1': ['nihao']})
>>> list(a.values())
[['nihao']]
>>> list(a)
['1']
>>>

我们直接指定defaultdict为list,这样就可以直接append了,不用管这个键是否在a这个dict中,如果不在,defaultdict会自动创建一个list。