# -*- coding: utf-8 -*-

#创建空的list列表
list1 = []

#创建一个元素
listOne = ['hello']
listOne2 = list(['hello'])
print(listOne)  #['hello']
print(listOne2)  #['hello']

#列表的创建(列表中可以插入类型不同的元素:int,float,str,list,tuple,dict,bool)
list2 = [1, {'pi': 3.14}, (3, 'b'), 'hello', 3.14, 3e3, True]
print(id(list2))    #4299951064
print(list2)    #[1, {'pi': 3.14}, (3, 'b'), 'hello', 3.14, 3000.0, True]

list3 = list2       #相当于给list2贴了一个list3的标签
print(id(list3))     #4299951064 和list2一样

list4 = list2[:]    #以切片的形式会创建一块新的内存空间
print(id(list4))     #4300021912 和list2不一样


strTemp = 'abcdefg'
list9 = strTemp.split()
print(list9)  #['abcdefg']

list10 = list(strTemp)  #list是工厂模式
print(list10)  #['a', 'b', 'c', 'd', 'e', 'f', 'g']

#修改列表元素
list2[2] = 'a'
print(list2)   #[1, {'pi': 3.14}, 'a', 'hello', 3.14, 3000.0, True]
print(list3)    #[1, {'pi': 3.14}, 'a', 'hello', 3.14, 3000.0, True] 更改list2的值,list3的也改变
print(list4)    #[1, {'pi': 3.14}, (3, 'b'), 'hello', 3.14, 3000.0, True]

#列表增加数据方式1,每次只能添加1个元素
list1.append('world')
list1.append(23l)
list1.append(23)
list1.append(3.15)
list1.append(23)
list1.append(['a', True])
print(list1)   #['world', 23L, 23, 3.15, 23, ['a', True]]
#方式2,一次可以加多个元素,但参数只有一个,所有参数可以为元组,字典,列表
list1.extend(list2)
list1.extend((2, 'a'))
list1.extend({'c', 9})
print(list1)   #['world', 23L, 23, 3.15, 23, ['a', True], 1, 2, 'a', 'hello', 3.14, 3000.0, 2, 'a', 9, 'c']
#方式3
list1.insert(1, 'new')  #['world', 'new', 23L, 23, 3.15, 23, ['a', True], 1, {'pi': 3.14}, 'a', 'hello', 3.14, 3000.0, True, 2, 'a', 9, 'c']
print(list1)   #

#查找某一元素的数量
print(list1.count(23))  #3

#查找某元素的索引
print(list1.index('a'))     #9
print(list1.index('a', 4))   #9 , 索引区间[4, 18).不包含18
print(list1.index('a', 4, 14))   #9, 索引区间[4, 14).不包含14
#print(list1.index('a', 1, 4))  #区间查找, 找不到报错,ValueError: 'a' is not in list

#删除列表元素和清空
list5 = ['1', 'a', 3.5, 4, 5]
list5.remove('a')
print(list5)    #['1', 3.5, 4, 5]
temp = list5.pop(2)
print(temp)    #4
print(list5)    #['1', 3.5, 5]
del(list5[0])
print(list5)    #[3.5, 5]
#清空,不要用list5 = [],这是新创建,如果还有变量指向原来的,原来的那块是还存在的
del(list5)
#print(str(list5))    #报错, NameError: name 'list5' is not defined

#列表比较
print(list4 < list3) #False

#判断元素在不在列表中
list6 = [1, 'a', 3.13, ['hello', 2], 4e2]
print('a' in list6)  #True
print('hello' in list6)  #False
print('hello' in list6[3])  #True
print('hello' not in list6)  #True
print('hello' not in list6[3])  #False

#列表元素反序
list7 = [1, 'a', 3, 4.5, 5]
list7.reverse()
print(list7)  #[5, 4.5, 3, 'a', 1]

#列表排序(从小到大排序, 包含特殊元素没关系, 会拍在后面, 具体位置可能随机的)
list8 = [5, 4.5, ('a', 9), {'pi': 3.14}, 'a', 3e4]
list8.sort()
print(list8)  #[4.5, 5, 30000.0, {'pi': 3.14}, 'a', ('a', 9)]

#列表长度
print(len(list8))  #6


#乘号*作为重复器
list11 = [1, 'a', 3.3] * 3
print(list11)  #[1, 'a', 3.3, 1, 'a', 3.3, 1, 'a', 3.3]

list12 = [1, 2, 3.4, 4, 5, 6]
print(max(list12))  #6
print(min(list12))  #1

print(list12[2])  #3.4
print(list12[-2])  #5 加个负号就相当于从后往前查找 list12[-n] == list12[len(li) - n]
print(list12[-0])  #1  相当于list12[0],

#所有元素单独做处理
print([i*2 for i in list12])  #[2, 4, 6.8, 8, 10, 12]