一般的字符串组合操作都建议使用join
, 字符串操作经常使用的就join
, split
, replace
, 另外还有partition
join
里面可以写成一个列表解析的形式
m = map(str, range(9))
\',\'.join(x for x in m if x != \'3\')
# 而不是
\',\'.join([x for x in m if x != \'3\'])
用list.remove
是不行的, 只能删除从左到右找到的第一个元素, 后面的不会删除
自认为两种比较好的方式如下
m = [\'a\', \'b\', \'c\', \'a\']
m = filter(lambda x: x !=\'a\', m)
或者
m[:] = (x for x in m if x != \'a\')
import random
import string
rand_str = \"\".join([random.choice(string.letters+string.digits) for _ in xrange(n)])
函数默认参数,只在定义时参数求值了一次,函数的多个调用将使用同一个可变参数
def test(data, x=[]):
x.append(data)
return x
print test(3)
# [3]
print test(4)
# [3, 4]
和函数参数问题一样,多个键值对应的value
将调用同一个列表。设置为{}
自然也是一样的结果
>>> a = dict.fromkeys(\'bc\', [])
>>> a[\'b\'].append(6)
>>> a
{\'b\': [6], \'c\': [6]}
一般会有声明多个空list
和空dict
的需求
将导致多个变量共享同一个[]
或{}
的错误的做法
a = b = []
c = d = {}
正确的方式
a, b = [], []
# for a lot of var
c, d, e, f = [{} for _ in xrange(4)]
其它int
, str
, bool
等没有此问题,可直接写成
a = b = True
del
的时候一次可以删除多个
>>> a = range(3)
>>> del a[2], a[0]
>>> a
[1]
可以用-1来反转列表
>>> a = range(7)
>>> a[::-1]
[6, 5, 4, 3, 2, 1, 0]
>>> a[::2]
[0, 2, 4, 6]
用切片删除某一段序列,等同于del a[1:4]
>>> a = [1, 2, 3, 4, 5, 6, 7]
>>> a[1:4] = []
>>> a
[1, 5, 6, 7]
去除偶数索引
>>> a = [0, 1, 2, 3, 4, 5, 6, 7]
>>> del a[::2]
>>> a
[1, 3, 5, 7]
主要用于多维矩阵中,减少定位操作时的复杂度,用得不多,更仔细的说明见这里
>>> class C(object):
... def __getitem__(self, item):
... return item
...
>>> C()[1:2, ..., 3]
(slice(1, 2, None), Ellipsis, 3)
使用二进制模式,如rb
模式, 使用r
则只能读取到一部分
with open(path, \'rb\') as f:
return f.read()
将文件对象看错iterator
with open(path, \'r\') as f:
for line in f:
print line
上一篇:python程序的调试