Python学习笔记

十三、操作列表

2017-11-18  本文已影响33人  焰火青春

1、操作列表

1.1、遍历列表

有时需要对列表中的每个元素进行操作,不可能单独地写一行代码去取出每个元素,再进行操作,这样既增加了代码量也浪费了大多时间。

这时我们可以使用for 循环遍历列表每个元素,再进行操作:

# 遍历魔术师名单,对每个魔术师说几句话
magicians = ['alice', 'david', 'carolina']
for magician in magicians:    # 在使用for循环时,可以使用单数复数的形式,如(for dog in dogs:)
    print(magician.title() + ', that was a great trick!')
    print("I can't wait to see your next trick, " + magician.title() + ".\n") # 在最后加个换行符,从而整洁地针对各位魔术师的消息编组
print('Thank you, everyone . That was a great magic show!')  # 循环外


Alice, that was a great trick!
I can't wait to see your next trick, Alice.

David, that was a great trick!
I can't wait to see your next trick, David.

Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.

Thank you, everyone . That was a great magic show!

1.2、创建数字列表

使用range()函数可以生成一系列数字,再将数字存储到列表中。

1.2.1、使用range()创建数字列表

可使用list()将range()的结果直接转换为列表。

numbers = list(range(1, 6))
numbers_1 = list(range(2, 11, 2))  # range()还可以指定步长,第一二个参数为数字区间,第三个为递进的不长
print(numbers)
print(numbers_1)

[1,2,3,4,5]
[2,4,6,8,10]

函数range()几乎可以闯将任何需要的数字集,如何创建一个列表:

# 创建一个1-10的10个整数的平方的列表
squares = []
for value in range(1, 11):
    # square = value**2    # 使用临时变量square,将每个数的平方存储在其中
    # squares.append(square)  # 再通过append()方法将元素添加到列表squares末尾,这两步可以简写为如下一步
    squares.append(value**2)    # 简写
print(squares)

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

使用临时变量,有时可以使代码更易读,但也会增加代码量,所以在写代码时,首先应该考虑编写清晰易懂且能完成所需功能的代码,等到审核代码时,再采用更高效的方法。

1.2.2、对数字列表进行简单计算

digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
min(digits)            # 找出列表中最小数
0

max(digits)            # 找出列表中最大数
9

sum(digits)            # 对列表中的数求和
45

1.3、列表解析

列表解析也可以称为列表推导式,它可以将原有的三四行的代码简写成一行,实现同样的效果,其格式为将for 循环和创建新元素的代码合并成一行,并自动添加新元素。

squares = [value**2 for value in range(1, 11)]
print(squares)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# 首先定义一个表达式:value**2
# 用于生成要存储到列表中的值,编写一个for循环,用于给表达式提供值

a = [i for i in range(10) if not (i % 2) and (i % 3)]  # not等级高于and
print(a)          # 能被2整除的数(0,2,4,6,8)为真,不能被3整除的数(1,2,4,5,7,8)为真
# 都为真则只有2、4、8时

# 相当于
a = []
for i in range(10):
    if i % 2 == 0 and i % 3 != 0:
        a.append(i)
print(a)

[2, 4, 8]
# 创建一个列表1-20(含20)内的多有奇数
a = [i for i in range(1, 21, 2)]
print(a)

# 创建一个列表,包含3-30内所以能被3整除的数字,并使用for循环打印
a = [i for i in range(3, 30) if (i % 3 == 0)]
print(a)

# 创建一个1-10所有整数的立方的列表,并使用for循环打印
a = [i**3 for i in range(1, 11)]
print(a)

1.4、列表切片

在前面学会了访问列表的单个元素,而使用列表切片可访问列表的部分或者全部元素。

# 采取元素索引值的方式访问,含开始索引值,不含结束索引值
lists = [1, 2, 3, 4, 5]
print(lists[0:3])      # 访问0-2的元素
print(lists[1:4])      # 访问1-3的元素
print(lists[:])        # 访问整个列表元素
print(lists[2:])       # 访问2到列表末尾的所有元素
print(lists[:4])       # 访问0到3的所有元素
print(lists[-3:])      # 访问倒数三个元素

[1, 2, 3]
[2, 3, 4]
[1, 2, 3, 4, 5]
[3, 4, 5]
[1, 2, 3, 4]
[3, 4, 5]

1.4.1、遍历切片

要遍历列表的部分元素,可使用for循环。

lists = [1, 2, 3, 4, 5]
for i in lists[-3:]:
  print(a)
3
4
5

1.4.2、复制列表

我们经常需要根据既有列表创建全新的列表,复制列表可以分为两种:

复制的新的列表为原有列表的副本,不会随原列表改变而改变

赋值的新列表,会虽原列表改变而改变

my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]    # 列表切片
friend_food = my_foods        # 赋值
my_foods.append('fish')       # 原列表添加新元素

print(my_foods)
print(friend_foods)
print(friend_food)

['pizza', 'falafel', 'carrot cake', 'fish']           
['pizza', 'falafel', 'carrot cake']                   # 不变
['pizza', 'falafel', 'carrot cake', 'fish']

练习

# 使用切片打印列表前三个元素
my_foods = ['pizza', 'falafel', 'carrot cake', 'fish']
print('The first three items in the list are:')
print(my_foods[:3])

# 使用切片打印列表中的三个元素
print('three items from the middle of the list are:')
print(my_foods[1:4])

# 复制列表,并把复制的列表存储到一个新变量new_nums中,再给每个列表新添加一个元素,并使用for循环打印列表,看是否有什么不同
nums = [1, 2, 3, 4, 5, 6]
new_nums = nums[:]

nums.append(7)
new_nums.append(8)


a = []
for num in nums:
    a.append(num)
print('My favorite numbers was: ', a)

b = []
for new_num in new_nums:
    b.append(new_num)
print('My new favorite numbers was: ', b)

My favorite numbers was:  [1, 2, 3, 4, 5, 6, 7]
My new favorite numbers was:  [1, 2, 3, 4, 5, 6, 8]
上一篇下一篇

猜你喜欢

热点阅读