python语句

>>> values
(1, 2, 3)
>>> x,y,z=values
>>> x
1
>>> y
2
>>> z
3

函数可以返回一个以上的值,打包成tuple。接受数量要一致。


is是同一性预算符。

>>> x=y=[1,2,3]
>>> z=[1,2,3]
>>> x is y
True
>>> x is z
False
>>> 因为x和y绑定到同一个列表上。z在另一个列表上。

不要用is比较 数值和字符串这类不可变值。结果不可预测。


short-circuit logic , lazy evaluation 避免执行无用代码。

a if b else c


>>> age =-1

>>> assert 0 < age <100, 'adfsdf'
Traceback (most recent call last):
  File "<pyshell#126>", line 1, in <module>
    assert 0 < age <100, 'adfsdf'
AssertionError: adfsdf


xrange一次只创建一个。大的序列是更高效。python3.0 range 会被转换成xrange风格的函数。什么意思?

>>> d
{'y': 2, 'x': 1, 'z': 3}
>>> for key, value in d.items():
print(key ,value)

y 2
x 1
z 3
>>> 

>>> name=['a','b','c']
>>> age=[12,34,56]
>>> zip(name, age)
<zip object at 0x00000000034F8D08>
>>> list(zip(name,age))
[('a', 12), ('b', 34), ('c', 56)]
>>> 

zip可以用在不等长的序列,最短序列用完停止

>>> list(zip(range(5), range(100)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
>>> 

>>> strings=['adfsdf','xxxxx']
>>> for index, string in enumerate(strings): 可以迭代 索引-值对
if 'xxx' in string:
strings[index] = '[censored]'


>>> strings
['adfsdf', '[censored]']
>>> 


>>> [x*x for x in range(10) if x%3==0]
[0, 9, 36, 81]

>>> [(x,y) for x in range(3) for y in range(3)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]


>>> girls=['alice','bernice','clarice']
>>> boys=['chris','arnold','bob']

>>> [b + "+" + g for b in boys for g in girls if b[0]==g[0]]
['chris+clarice', 'arnold+alice', 'bob+bernice']

更高效率如下:

>>> girls=['alice','bernice','clarice']
>>> boys=['chris','arnold','bob']
>>> letterGirls={}
>>> for girl in girls:
	letterGirls.setdefault(girl[0], []).append(girl)# 返回时是空list,在append,精准对应,不用像上面每次都循环

	
>>> print([b + '+' + g for b in boys for g in letterGirls[b[0]]])
['chris+clarice', 'arnold+alice', 'bob+bernice']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值