你有一个清单:<代码>袋=[1、2、3、4、5)代码>
现在你想让所有元素翻倍,让它看起来是这个样子:<代码>(2、4、6、8、10]代码>
大多初学者,根据之前语言的经验会大概这样来做
袋=[1、2、3、4、5) 因为我在范围(len(袋): 包[我]=[我]袋* 2
但是有更好的方法:
<代码>袋=(elem elem的* 2袋)代码>
很简洁对不对吗?这叫做Python的列表推导式。
还是上面的列表。如果可能尽量避免这样做:
袋=[1、2、3、4、5) 因为我在范围(len(袋): 打印(包[我])
取而代之的应该是这样:
袋=[1、2、3、4、5) 我的包: 打印(i)
如果x是一个列的表,你可以对它的元素进行迭代。多数情况下你不需要各元素的索引,但如果你非要这样做,那就用列举函数。它像下边的样子:
袋=[1、2、3、4、5) 指数,元素的枚举(袋): 打印(指数(元素)
非常直观明了。
如果你是从java或C语者言转到Python来,可能会习惯于这样:
一个=5 b=10 #交换a和b tmp=一个 a=b b=tmp
但Python提供了一个更自然更好的方法。
一个=5 b=10 #交换a和b a、b=b,
假如你要一个是10个整数0的列的表,你可能首先想到:
袋=[] 在范围(10):_ bag.append (0)
换个方式吧:
<代码>袋=[0]* 10 代码>
看,多优雅。
注意:如果你列表包含了列表,这样做会产生浅拷贝。
举个例子:
bag_of_bags=[[0]] * 5 # [[0], [0], [0], [0], [0]] bag_of_bags [0] [0]=1 # [[1], [1], [1], [1], [1]]
哎呀!所有的列表都改变了,而我们只是想要改变第一个列表。
改一改啦:
bag_of_bags=[[0] _的范围(5)) # [[0],[0],[0],[0],[0]] bag_of_bags [0] [0]=1 # [[1],[0],[0],[0],[0]]
"过早优化是万恶之源”问问自己,初始化一个列表是必须的吗?
你会经常需要打印字符串。要是有很多变量,避免下面这样:
name=" Raymond " 年龄=22 born_in="奥克兰" 字符串="你好,我的名字是" +名称+“我”+ str(年龄)+”年。我出生在“+ born_in +”。“ 打印(string)
额,这看起来多乱呀?你可以用个漂亮简洁的方法来代替,.format。
这样做:
name=" Raymond " 年龄=22 born_in="奥克兰" 字符串="你好,我的名字叫{0},{1}岁。我出生在{2}。格式(姓名、年龄、born_in) 打印(string)
Python允许你在一个函数中返回多个元素,这让生活更简单。但是在解包元组的时候出出线这样的常见错误:
def二进制():返回0,1 结果=二进制() 0=结果[0] 一个=结果[1]
这是没必要的,你完全可以换成这样:
def二进制():返回0,1 零,> 在此={} 袋=[2、3、1、2、5,6,7,9,2、7] 我的包: 如果我在此方面: 在此[我]+=1: 在此[我]=1 因为我在范围(10): 如果我在此方面: print(“项{}:{}”。格式(我在此[我])) 其他: print(“项{}:{}”。格式(我,0))
但是,用get()是个更好的办法。
在此={} 袋=[2、3、1、2、5,6,7,9,2、7] 我的包: 在此[我]=此方面。(我,0)+ 1 因为我在范围(10): print(“项{}:{}”。格式(我在此。(我,0)))
当然你也可以用setdefault来代替。
这还用一个更简单却多费点开销的办法: