"""
referrence:第二章:列表和元组
@author: Ethan
"""
#1-序列切片注意事项
names = [x for x in range(1,11)]
#切片中最左边索引比它右边的晚出现在序列中，返回空,前提是步长为正
#左边索引与右边索引若与步长方向不一致，则为空
names[-3:0]
#包含最右侧
names[-3:]
#不包含最右侧
names[:3]
#包含所有
names[:]
#步长不能为0
names[::0]
#此处返回为空
names[10:0]
#没有10号索引元素，为何可以出现10号？
names[10:0:-2]
#从右往左，步长为2
names[::-2]
#从6开始，从右往左，步长为2
names[5::-2]

'''
总结：最左边元素包含在结果中，最右边元素不在分片内，步长为负数，开始元素大于结束元素
建议：在交互命令行中验证为主，以上规律不能涵盖所有情况
'''

#2-其他注意事项
#不同类型的序列不能使用'+'
[1,2,3] + 'world!'
#返回一个包含10个1的列表
[1] * 10
#max的参数可以直接使用数字，而不是列表
max(1,2,3)
max([1,2,3])

#3-列表的独有操作
#赋值：元组和字符串不具备赋值的功能
numbers = [1,5]
#替换切片，返回为[1,2,3,4,5]
numbers[1:1] = [2,3,4]
#返回为[1,5]
numbers[1:4] = []

#extend和'+'区别:extend方法修改被扩展的序列，'+'返回一个新的列表
a = [1,2,3]
b = [4,5,6]
a + b
a.extend(b)

#切片实现insert方法
numbers = [1,2,3,4,5]
numbers.insert(3,'haha')
numbers[3:3] = 'haha'

#改变列表却不返回值的方法:append remove reverse sort
#获取sort排序后的副本，且保留原有列表不变
#此时y为空，x排序
x = [3,5,4,2]
y = x.sort()
#y排序而x未排序
x = [3,5,4,2]
y = x[:]
y.sort()
#'=':x将引用赋值给了y,则两者都发生排序
x = [3,5,4,2]
y = x
y.sort()

#4-元组注意事项
#一个值的元组,第一个是数值，第二个是元组，一个逗号的差别
3*(40+2)
3*(40+2,)
#元组可以作为字典中的键，而列表不行
