操作列表
1.0遍历整个列表
使用for循环
magjicians = ['alice','david','carolina']
for magician in magicians:#对了,magician是可以随便改的,不一定是列表里的名字
print(magician)
for循环使python从列表magicians中取出一个名字,并将其存储在变量magician中
研究一下
for magician in magicians:
获取第一个值‘alice’,存储在magician,读取下一行
print(magcian)
打印magician的值’alice’,由于for语句的列表magicians的数据没有读取完,返回循环的第一行
接着依次打出‘david’’carolina’
来写更多的操作
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was a great trick!")
#把magician当成普通的变量即可
在python中,只有缩进的语句会被重复执行,
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was agreat trick!")
print("I can't wait to see your next trick, " + magician.title() + ".\n")
print("thank you ,everyone")
避免缩进错误
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)
#忘记缩进
#indentationerror:expected an indented block
别忘了冒号:
2.0创建数值列表
使用函数range()
形式:range(数值,数值),切记这个数值只能是整数
**range(1,5)**不是列表,没有数值
只能用循环来表示
for value in range(1,5):
print(value)
#输出
1
2
3
4
#会差一
p = range(1,5)
print(p)
#事实上,会输出range(1,5)
#但是,并没有加双引号,为什么不会出现error
list()
用list()将range()的结果直接转换为列表
numbers = list(range(1,6))
print(numbers)
#结果
[1,2,3,4,5]
还可以指定步长
even_numbers = list(range(2,11,2))
print(even_numbers)
#result
[2,4,6,8,10]
#range的第三个参数是表示两个数之间差多少
怎么表示(1~10)的平方,用(**)表示平方运算
squares = []
for value in range(1,11):
square = value**2
#可以不用临时变量square
squares.append(square)
#记住添加列表元素的方法
#.append()和insert(,)
print (squares)
简单的统计运算
即min(列表名),max(列表名),sum(列表名)
digits = [1,2,3,4,5,6,7,8,9,0]
min = min(digits)
max = max(digits)
sum = sum(digits)
print(min)
print(max)
print(sum)
#当然可以不用变量min,max ,sum。直接放到print后面去
列表解析
列表解析将for循环和创建新元素的代码和成一行
squares = [value**2 for value in range(1,11)]
print(squares)
#要使用这种语法, 首先指定一个描述性的列表名, 如squares ; 然后, 指定一个左方括号, 并定义一个表达式, 用于生成你要存储到列表中的值。
在这个示例中, 表达式为value**2 , 它计算平方值。 接下来, 编写一个for 循环, 用于给表达式提供值, 再加上右方括号。 在这个示例中, for 循环为for value in range(1,11) , 它将值1~10提供给表达式value**2 。
#请注意, 这里的for 语句末尾没有冒号
使用列表的一部分
一直在学习如何处理列表的所有元素。 你还可以处理列表的部分元素——Python称之为切片
切片
要创建切片, 可指定要使用的第一个元素和最后一个元素的索引。 与函数range() 一样, Python在到达你指定的第二个索引前面的元素后停止。 要输出列表中的前三个元素, 需
要指定索引0~3, 这将输出分别为0 、 1 和2 的元素。
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3])
#result
['charles', 'martina', 'michael']
如果你没有指定第一个索引, Python将自动从列表开头开始:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[:4])
#result
['charles', 'martina', 'michael', 'florence']
要让切片终止于列表末尾, 也可使用类似的语法。
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[2:])
#result
['michael', 'florence', 'eli']
负数索引返回离列表末尾相应距离的元素, 因此你可以输出列表末尾的任何切片。
例如, 如果你要输出名单上的最后三名队员, 可使用切片players[-3:] :*
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[-3:])
遍历切片
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print("Here are the first three players on my team:")
for player in players[:3]:
print(player.title())
复制列表
my_foods = ['pizza', 'falafel', 'carrot cake']
#复制列表,要用切片的形式
friend_foods = my_foods[:]
print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)
如果不使用切片
my_foods = ['pizza', 'falafel', 'carrot cake']
#这行不通
friend_foods = my_foods
my_foods.append('cannoli')
friend_foods.append('ice cream')
print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)
#结果
My favorite foods are:
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']
My friend's favorite foods are:
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']
这里将my_foods 赋给friend_foods , 而不是将my_foods 的副本存储到friend_foods (见❶) 。 这种语法实际上是让Python将新变量friend_foods 关联到包含在my_foods 中的列表, 因此这两个变量都指向同一个列表。 鉴于此, 当我们将’cannoli’ 添加到my_foods 中时, 它也将出现在friend_foods 中; 同样, 虽然’icecream’ 好像只被加入到了friend_foods 中, 但它也将出现在这两个列表中。
不可变的列表——元组
元组看起来犹如列表, 但使用圆括号而不是方括号来标识。 定义元组后, 就可以使用索引来访问其元素, 就像访问列表元素一样
dimensions = (200, 50)
print(dimensions[0])
print(dimensions[1])
#结果
200
50
尝试修改
dimensions = (200, 50)
dimensions[0] = 25
Traceback (most recent call last):
File "dimensions.py", line 3, in <module>
dimensions[0] = 250
TypeError: 'tuple' object does not support item assignment
遍历元组的所有值
dimensions = [200,50]
for dimension in dimensions:
print(dimension)
#结果
200
50
虽然不能修改元组的元素,但是可以通过给存储元组的变量重新赋值。重新定义一个列表
dimensions = (200,50)
print("oringnal dimensions:")
for dimension in dimensions:
print(dimension)
dimensions = (400,100)
print("modifed dimensions:")
for dimension in dimensions:
print(dimension)
#结果
Original dimensions:
200
50
Modified dimensions:
400
100
#这里就有一个疑问,在C中,一个变量名是只能存储一个变量的,事实上,python也是如此,那为何第四行的print的值不会变成修改后的呢
#是因为python是即时型解释语言
来做个测试,直接搞个变量,然后再重新修改
my_watch = "lashiton"
print(my_watch)
my_watch = "syst"
print(my_watch)
#结果
lashiton
syst
这里要强调的是,在计算机的内存中,变量的值确实改变了