2. 列表、字典

一. 列表

鉴于列表通常包含多个元素,给列表指定一个表示复数的名称(如letters、digits或names)是个不错的主意。

用方括号([])来表示列表,并用逗号来分隔其中的元素。

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles)

要访问列表元素,可指出列表的名称,再指出元素的索引,并将其放在方括号内。将索引指定为-1,可让Python返回最后一个列表元素,索引-2返回倒数第二个列表元素,索引-3返回倒数第三个列表元素,以此类推。

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0]) 	# trek
print(bicycles[-1]) # specialized
1、相关API
a. 添加元素
  • append():将元素添加到了列表末尾,而不影响列表中的其他所有元素:
  • insert():将元素添加到指定的位置
motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.insert(1, 'ducati') # 元素被添加到索引为1的位置
print(motorcycles) 
b. 删除元素
  • pop():可删除列表末尾的元素,并让你能够接着使用它。列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素。实际上,你可以使用pop()来删除列表中任何位置的元素,只需在括号中指定要删除的元素的索引即可。
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

popped_motorcycle = motorcycles.pop()
print(motorcycles)
print(popped_motorcycle)

first_owned = motorcycles.pop(0)
print(first_owned) #  honda
  • del语句: 删除任何位置处的列表元素,条件是知道其索引。
motorcycles = ['honda', 'yamaha', 'suzuki']
del motorcycles[0]
print(motorcycles) # ['yamaha', 'suzuki']
  • remove():根据值删除列表中的元素
motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.remove('honda')
print(motorcycles)
c. 列表排序
  • sort():久性地修改了列表元素的排列顺序,按字母顺序排列。
  • sort(reverse = True):按字母反序排列,排列影响原列表的内容。传递参数reverse=True
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars) # ['audi', 'bmw', 'subaru', 'toyota']

cars.sort(reverse = True)
print(cars)	# ['toyota', 'subaru', 'bmw', 'audi']
  • sorted():能够按特定顺序显示列表元素,同时不影响原列表排列顺序。按与字母顺序相反的顺序显示列表,也可向函数sorted()传递参数reverse=True
cars = ['bmw', 'audi', 'toyota', 'subaru']
print("Here is the original list:")
print(cars) 					   # ['bmw', 'audi', 'toyota', 'subaru']
print("\nHere is the sorted list:")
print(sorted(cars))			 	   # ['audi', 'bmw', 'subaru', 'toyota']
print(sorted(cars, reverse = True))# ['toyota', 'subaru', 'bmw', 'audi']
print("\nHere is the original list again:")
print(cars) 					   # ['bmw', 'audi', 'toyota', 'subaru']
  • reverse():不将列表中的元素反转,此操作影响原列表的内容。
d. 列表长度

用函数len()可快速获悉列表的长度

cars = ['bmw', 'audi', 'toyota', 'subaru']
print(len(cars))
2、遍历链表

假设我们有一个魔术师名单,需要将其中每个魔术师的名字都打印出来:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
	print(magician)
print()

for magician in magicians:
	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!")
3、数值列表
a. 创建数字列表
  • range(1, 5):生成数字1~4。用函数range()时,还可指定步长。
for value in range(1,5):
	print(value) # 循环输出1,2,3,4

# 打印1~10内的偶数,指定步长为2:
even_nums = list(range(2, 11, 2))
print(even_nums) # [2, 4, 6, 8, 10]

# 如何创建一个列表,其中包含前10个整数(即1~10)的平方
squares = []
for value in range(1,11):
	square = value ** 2
	squares.append(square)
print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
  • list():创建数字列表,可使用函数list()将range()的结果直接转换为列表。如果将range()作为list()的参数,输出将为一个数字列表。
numbers = list(range(1, 6))
print(numbers)	# [1, 2, 3, 4, 5]
b. 统计数字列表
  • min(数字列表):求出数字列表中最小的元素
  • max(数字列表):求出数字列表中最大的元素
  • sum(数字列表):对数字列表求和
digits =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(min(digits))
print(max(digits))
print(sum(digits))
c. 列表解析

列表解析:只需要编写少量的代码,就可以创建一个目标列表。使用 for value in range(1, 11)创建数字,并将创建的数字复制给前面的代码,value**2:将每个值平方

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

切片:处理列表的部分元素——Python称之为切片。。要输出列表中的前三个元素,需要指定索引0~3,这将输出分别为0、1和2的元素。

如果没有指定第一个索引,Python将自动从列表开头开始。要让切片终止于列表末尾,也可使用类似的语法。

players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3])			# ['charles', 'martina', 'michael']
print(players[:4])			# ['charles', 'martina', 'michael', 'florence']
print(players[2:])			# ['michael', 'florence', 'eli']
print(players[-3:])

# 遍历切片
print("Here are the first three players on my team:")
for player in players[:3]:
	print(player.title())
5、复制列表

复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:]),创建一个始于第一个元素,终止于最后一个元素的切片,即复制整个列表。

如果直接将一个列表赋值给另一个列表,则两个变量指向的同一个地址,引用的是同一个列表。

my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:
6、元组

列表是可以修改的,非常适合用于存储在程序运行期间可能变化的数据集。而存储不可变的列表被称为元组

元组看起来犹如列表,但使用圆括号而不是方括号来标识。元组中的元素是不能改变的,但是存储元组的变量的值是可以改变的。

相比于列表,元组是更简单的数据结构。如果需要存储的一组值在程序的整个生命周期内都不变,可使用元组。

dimensions = (200, 50)
print(dimensions[0])
print(dimensions[1])

# dimensions[0] = 300 # 元组中的元素不能更改
#print(deimension[0])

dimensions = (300, 500)
print(dimensions[0])

二. 字典

字典是一系列键—值对。每个键都与一个值相关联,你可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将任何Python对象用作字典中的值。

键和值之间用冒号分隔,而键—值对之间用逗号分隔。在字典中,想存储多少个键—值对都可以。

alien_0 = {'color': 'green', 'points': 5}
new_points = alien_0['points'] 
print("You just earned " + str(new_points) + " points!")
1、使用字典

添加键值对:

字典是一种动态结构,可随时在其中添加键—值对。要添加键—值对,可依次指定字典名、用方括号括起的键和相关联的值。

alien_0 = {'color':'green', 'points':5}
print(alien_0)

alien_0['x_position'] = 0
alien_0['y_positoin'] = 25
print(alien_0)

删除键值对:

对于字典中不再需要的信息,可使用del语句将相应的键—值对彻底删除。使用del语句时,必须指定字典名和要删除的键。

alien_0 = {'color':'green', 'points':5}
print(alien_0)

del alien_0['color']
print(alien_0)

更改字典中的值:

要修改字典中的值,可依次指定字典名、用方括号括起的键以及与该键相关联的新值。

alien_0 = {'x_position':0, 'y_position': 25, 'speed':'medium'}
print("Original x-position: " + str(alien_0['x_position']))

# 向右移动外星人
# 据外星人当前速度决定将其移动多远
if alien_0['speed'] == 'slow':
	x_increment = 1
elif alien_0['speed'] == 'medium':
	x_increment = 2
else:
	# 这个万幸人的速度一定很快
	x_increment = 3
	
alien_0['x_position'] += x_increment # 修改了字典中值
print("New x-position: " + str(alien_0['x_position']))
2、遍历字典

遍历字典的键值对:

字典变量.items():它返回一个键—值对列表。注意,即便遍历字典时,键—值对的返回顺序也与存储顺序不同。Python不关心键—值对的存储顺序,而只跟踪键和值之间的关联关系。

user_0 = {
    'username': 'efermi',
    'first': 'enrico',
	'last': 'fermi',    
}

for key, value in user_0.items():
	print("\nKey: " + key)
	print("Value: " + value)

遍历字典的键:

在不需要使用字典中的值时,方法keys()很有用。方法keys()它返回一个列表,包含字典中的所有键。

遍历字典时,会默认遍历所有的键,因此,如果将上述代码中的for name in favorite_languages.keys():替换为for name in favorite_languages:,输出将不变。

favorite_languages = {
    'jen': 'python',
	'sarah': 'c',
	'edward': 'ruby',
	'phil': 'python',
}
friends = ['phil', 'sarah']
for name in favorite_languages.keys():
	print(name.title())
	if name in friends:
		print(" Hi " + name.title() + 
		", I see your favorite languages is " +
		favorite_languages[name].title() + "!") 

遍历字典中的值:

使用方法values(),它返回一个值列表,而不包含任何键。

favorite_languages = {
    'jen': 'python',
	'sarah': 'c',
	'edward': 'ruby',
	'phil': 'python',
}

print("The following languages have been mentioned:")
for language in favorite_languages.values():
	print(language.title())

如果对遍历的字典中的值,需要有去重的需求,可以使用集合(set)。集合类似于列表,但每个元素都必须是独一无二的。

print("The following languages have been mentioned:")
for language in set(favorite_languages.values()):
	print(language.title())

按顺序遍历字典中的所有键:

要以特定的顺序返回元素,一种办法是在for循环中对返回的键进行排序。为此,可使用函数sorted()来获得按特定顺序排列的键列表的副本。

favorite_languages = {
    'jen': 'python',
	'sarah': 'c',
	'edward': 'ruby',
	'phil': 'python',
}

for name in sorted(favorite_languages.keys()):
	print(name.title() + ",thanks for your take our pool")
3、嵌套

在列表存储字典:

将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。可以在列表中嵌套字典、在字典中嵌套列表,在字典中嵌套字典,在列表中嵌套列表。

# 创建一个用于储存外形人的空列表
aliens = []

# 创建30个绿色的外星人
# range() 返回一系列数字,其唯一的用途是告诉Python我们要重复这个循环多少次。
for alien_number in range(30):
	new_alien = {'color':'green', 'points':5, 'speed':'slow'}
	aliens.append(new_alien)

for alien in aliens[:3]:
	if alien['color'] == 'green':
		alien['color'] = 'yellow'
		alien['points'] = 10
		alien['speed'] = 'medium'
        
# 显示前5个外星人
for alien in aliens[:5]:
	print(alien)
print("...")

在字典中存储列表:

favorite_languages = {
	'jen':['python', 'ruby'],
	'sarah':['c'],
	'edward':['ruby', 'go'],
	'phil':['python', 'haskell'],
}

for name, languages in favorite_languages.items():
	print("\n" + name.title() + "'s favorite languages are:")
	for language in languages:
		print("\t" + language.title())

在字典中存储字典:

users = {
	'aeinstein': {
		'first': 'albert',
		'last': 'einstein',
		'location': 'princeton',
	},
	
	'mcurie': {
		'first': 'marie',
		'last': 'curie',
		'location': 'paris',
	},
}

for username, user_info in users.items():
	print("\nUsername: " + username)
	full_name = user_info['first'] + " " + user_info['last']
	location = user_info['location']
	
	print("\tFull name: " + full_name.title())
	print("\tLocation: " + location.title())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值