当第一次开始编程时,很容易会创建许多独立的变量, 来保存一组类似的值。例如,如果要保存猫的名字, 可能会写出这样的代码:
catNamel ='Zophie'
catName2 = 'Pooka'
catName3 = 'Simon'
catName4 = 'Lady Macbeth'
catName5 = 'Fat-tail'
catName6 = 'Miss Cleo'
事实表明这是一种不好的编程方式。 举一个例子,如果猫的数目发生改变, 程序就不得不增加变量,来保存更多的猫。 这种类型的程序也有很多重复或几乎相等的代码。
for i in range(4):
print(i)
0 1 2 3
这是因为 range(4)
的返回值是类似列表的值。
Python 认为它类似于 [0, 1,2, 3]
。
下面的程序和前面的程序输出相同:
for i in [0, 1, 2, 3]:
print(i)
0 1 2 3
前面的 for
循环实际上是在循环执行它的子句,在每次迭代中,让变量依次设置为列表中的值。
一个常见的 Python 技巧,是在 for
循环中使用 range(len(someList))
,
迭代列表的每一个下标。例如,在交互式环境中输入以下代码:
supplies = ['pens', 'staplers', 'flame-throwers', 'binders']
for i in range(len(supplies)):
print('Index ' + str(i) + ' in supplies is: ' + supplies[i])
Index 0 in supplies is: pens Index 1 in supplies is: staplers Index 2 in supplies is: flame-throwers Index 3 in supplies is: binders
在前面的循环中使用 range(len(supplies))
很方便,
这是因为,循环中的代码可以访问下标(通过变量 i
),以及下标处的值(通过 supplies[i])
。
最妙的是, range(len(supplies))
将迭代 supplies
的所有下标,无论它包含多少表项。
更新的方式是使用 enumerate()
函数:
for idx, item in enumerate(supplies):
print(idx, item)
0 pens 1 staplers 2 flame-throwers 3 binders
'howdy' in ['hello', 'hi', 'howdy', 'heyas']
True
spam = ['hello', 'hi', 'howdy', 'heyas']
'cat' in spam
False
'howdy' not in spam
False
'cat' not in spam
True
例如,下面的程序让用户输入一个宠物名字,
检查该名字是否在宠物列表中。打开一个新的文件编辑器窗口,
输入以下代码,并保存为 myPets.py
:
myPets = ['Zophie', 'Pooka', 'Fat-tail']
print( 'Enter a pet name:')
name = input()
if name not in myPets:
print( 'I do not have a pet named' + name)
else:
print(name + ' is my pet.')
Enter a pet name:
I do not have a pet namedaa
cat = ['fat', 'black', 'loud']
size = cat[0]
color = cat[1]
disposition = cat[2]
而是输入下面的代码:
cat = ['fat', 'black', 'loud']
size, color, disposition = cat
cat
['fat', 'black', 'loud']
变量的数目和列表的长度必须严格相等,否则 Python 将给出 ValueError
:
# 数量不一致
# size, color, disposition, extra = cat #此代码会报错
spam = ['cat', 'bat', 'rat', 'elephant']
spam[0:4]
['cat', 'bat', 'rat', 'elephant']
spam[1:3]
['bat', 'rat']
spam[0:-1]
['cat', 'bat', 'rat']
作为快捷方法,可以省略切片中冒号两边的一个下标或两个下标。
省略第一个下标相当于使用 0
,或列表的开始。
省略第二个下标相当于使用列表的长度,
意味着分片直至列表的末尾。
spam = ['cat', 'bat', 'rat', 'elephant']
spam[:2]
['cat', 'bat']
spam[1:]
['bat', 'rat', 'elephant']
spam[:]
['cat', 'bat', 'rat', 'elephant']