!/usr/bin/env python
# -*- coding:utf-8 -*-
# __author__:anxu.qi
# Date:2018/11/29
列表list 有序的,可變的
:一個隊列,一個排列整齊的隊伍
:列表內的個體稱作元素,由若干元素組成列表
:元素可以是任意對象(數字、字符串、對象、列表等)
:列表內元素有順序,可以使用索引
:線性的數據結構
:使用[]表示
:支持in操作 ,以逗號進行分隔
字符串轉為列表,內部使用for循環進行迭代。

# 列表轉換為字符串的時候:
# 列表中有數字和字符串:需要自己寫for循環一個一個進行處理
將整個列表作為一個整體,當做一個字符串了,就是在列表外加了一個“”雙引號。
正確做法:
# 列表中只有字符串:直接使用字符串join方法,轉為字符串
# 字符串操作

# names = ["NingTao", "RenBaiqing", "GuoYue", "RenBaiqing"]
# ################### 列表的查 ###############################
# # 索引
# print(names[3]) # 查詢出下標為3的值
# # RenBaiqing
# print(names[0], names[2]) # 查詢出下標為0,2的值
# # NingTao GuoYue
#
# # 切片 顧頭不顧尾
# print(names[1:3]) # 查詢下標為1到3的值,但不包括3的值
# # ['RenBaiqing', 'GuoYue']
# print(names[-1]) # 查詢最后一個值
# # RenBaiqing
# print(names[-3:-1]) # 查詢數兩個值
# # ['RenBaiqing', 'GuoYue']
# print(names[-3:]) # 查詢倒數3個值
# # ['RenBaiqing', 'GuoYue', 'RenBaiqing']
# print(names[0:3]) # 查詢下標為0-3的值,不包括下標3的值
# # ['NingTao', 'RenBaiqing', 'GuoYue']
# print(names[:3]) # 注:如果前面的是0的話可以省略掉
# # ['NingTao', 'RenBaiqing', 'GuoYue']
# print(names.index("RenBaiqing")) # 查詢 RenBaiqing的下標值
# # 1
# print(names[names.index("RenBaiqing")])
# # RenBaiqing
# ################### 列表的增 ###############################
# names = ["NingTao", "RenBaiqing", "GuoYue", "RenBaiqing"]
# names.append("FuZhiqiang") # 追加到列表最后
# # ['NingTao', 'RenBaiqing', 'GuoYue', 'RenBaiqing', 'FuZhiqiang']
# print(names)
# # ['NingTao', 'RenBaiqing', 'GuoYue', 'RenBaiqing']
# 注 新增的話只能一次增加一個
# names.insert(1, "FuZhiqiang") # 插入到下標為1的位置,原來的將被往后推。
# print(names)
# # ['NingTao', 'FuZhiqiang', 'RenBaiqing', 'GuoYue', 'RenBaiqing']
# ################### 列表的刪除 ###############################
# 第一種:names.remove("RenBaiqing") # 直接填寫值
從左至右查找第一個匹配value的值,移除
# names.remove("RenBaiqing") # 刪除列表中的 RenBaiqing
# 第二種 del names[4] # 填寫的是下標
# del names[4] # 填寫的是值的下標 # 刪除下標為4的值
del names[2:4] # 切片方式刪除,刪除多個
# 第三種 name.pop
# names.pop() # 默認不填寫下標是刪除最后一個
# names.pop(2) # 指定下標后,刪除下標的位置
# 第四中 del names
# 刪除列表變量名,直接刪除整個變量
# ################### 列表的改 ###############################
# print(names)
# # ['NingTao', 'FuZhiqiang', 'RenBaiqing', 'GuoYue', 'RenBaiqing']
# names[1] = "YanWen" # 將 FuZhiqing 替換為 YangWen
# # ['NingTao', 'YanWen', 'RenBaiqing', 'GuoYue', 'RenBaiqing']
# names2 = ["NingTao", "RenBaiqing", "GuoYue", "RenBaiqing"]
# print(names2.index("RenBaiqing"))
# ################### 列表統計(count) ###############################
# 計算元素出現的次數
# print(names.count("NingTao"))
# # 2
# ################### 列表清空(clear) ###############################
# names.clear() # 清空整個列表的所有元素,只剩下一個空列表
# print(names)
# # []
# ################### 列表反轉(reverse)(就地修改) ###############################
# names = ["NingTao", "RenBaiqing", "GuoYue", "RenBaiqing"]
# names.reverse()
# print(names)
# # ['RenBaiqing', 'GuoYue', 'RenBaiqing', 'NingTao']
# ################### 列表排序(sort)(就地修改) ###############################
# 排序規則: 特殊符號 --》 數字 --》 大寫 --》 小寫
# 是按照ASCII碼中的排序來的
1.對列表元素進行排序,就地修改,默認升序。reverse默認為False
2.reverse 為True ,反轉,降序
3.key一個函數,指定key如何排序
lst.sort(key=str)
# names = ["3NingTao", "rRenBaiqing", "#GuoYue", "RenBaiqing"]
# names.sort()
# print(names)
# # ['#GuoYue', '3NingTao', 'RenBaiqing', 'rRenBaiqing']
# ################### 列表擴展 (extend)###############################
# 參數必須是可迭代對象
# 把每個元素 循環迭代加入到原來的列表中
# 就地修改的
# names = ["3NingTao", "rRenBaiqing", "#GuoYue", "RenBaiqing"]
# names2 = [1,2,3,4,5,6]
# names.extend(names2)
# del names2
# # print(names,names2)
# print(names)
# # ['3NingTao', 'rRenBaiqing', '#GuoYue', 'RenBaiqing', 1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6]
# ################### 列表復制 (淺 copy) ###############################
# 淺copy,只copy一次,是因為第一次的內存地址是又克隆的一份,而其他的地址沒有復制,還是用的原來的內存地址,所以會變
# names = ["3NingTao", "rRenBaiqing",["aliyun","jack"], "#GuoYue", "RenBaiqing","XiaoMing"]
# names2 = names.copy()
# print(names)
# # ['3NingTao', 'rRenBaiqing', ['aliyun', 'jack'], '#GuoYue', 'RenBaiqing', 'XiaoMing']
# print(names2)
# # ['3NingTao', 'rRenBaiqing', ['aliyun', 'jack'], '#GuoYue', 'RenBaiqing', 'XiaoMing']
# names[4] = "小明"
# names2[2][0] = "ALIYUN"
# print(names)
# # ['3NingTao', 'rRenBaiqing', ['ALIYUN', 'jack'], '#GuoYue', '小明', 'XiaoMing']
# print(names2)
# # ['3NingTao', 'rRenBaiqing', ['ALIYUN', 'jack'], '#GuoYue', 'RenBaiqing', 'XiaoMing']
舉例:銀行同一賬號,多個存款人
################### 列表復制 (深 copy.deecopy) ###############################
import copy
# 深copy 是完全獨立的復制列表 ,如果是數據量特別大的情況下,這樣做是不合適的,因為將又開辟一份內存空間。
names = ['3NingTao', 'rRenBaiqing', ['aliyun', 'jack'], '#GuoYue', 'RenBaiqing', 'XiaoMing']
names2 = copy.deepcopy(names)
print(names)
# ['3NingTao', 'rRenBaiqing', ['aliyun', 'jack'], '#GuoYue', 'RenBaiqing', 'XiaoMing']
print(names2)
# ['3NingTao', 'rRenBaiqing', ['aliyun', 'jack'], '#GuoYue', 'RenBaiqing', 'XiaoMing']
names[2][0] = "ALIYUN"
print(names)
# ['3NingTao', 'rRenBaiqing', ['ALIYUN', 'jack'], '#GuoYue', 'RenBaiqing', 'XiaoMing']
print(names2)
# ['3NingTao', 'rRenBaiqing', ['aliyun', 'jack'], '#GuoYue', 'RenBaiqing', 'XiaoMing']
names = ['3NingTao', 'rRenBaiqing', ['aliyun', 'jack'], '#GuoYue', 'RenBaiqing', 'XiaoMing',"hehe"]
print(names[0::2])
print(names[::2])
print(names[:-1:2])
################### 列表 ###############################
# #!/usr/bin/env python
# # -*- coding:utf-8 -*-
# # __author__:anxu.qi
# # Date:2018/11/19
# ######################### 列表 #################################
aa_list = ["tami","beijing","fengshan","fengtai","apache","nginx"]
# print(aa_list)
## 索引
print(aa_list[0])
# tami
## 切片
print(aa_list[0:2])
# ['tami', 'beijing']
## len
print(aa_list[2:len(aa_list)])
# ['fengshan', 'fengtai', 'apache', 'nginx']
################# for ################
# aa_list = ["tami","beijing","fengshan","fengtai","apache","nginx"]
## 循環
for i in aa_list:
print(i)
"""
tami
beijing
fengshan
fengtai
apache
nginx
# """
############################# 列表內布提供的功能 ###############################
################################ append 追加 ##################################
# def append(self, p_object):
# 追加功能,在列表的最后添加
name_list = ["apache","nginx","tomcat","redis"]
name_list.append("mysql")
print(name_list)
# ['apache', 'nginx', 'tomcat', 'redis', 'mysql']
################################ count 統計次數 ##################################
# def count(self, value):
# 統計元素出現的次數
name_list = ["apache","nginx","tomcat","redis","tomcat","tomcat"]
print(name_list.count("tomcat"))
# 3
時間復雜度:考量算法的重要指標
index和count方法都是O(n) O(1) O(n2)
隨着列表數據規模的增大,而效率下降
如何返回列表元素的個數?如何遍歷?如何設計高效?
################################# extend 擴展 ##################################
# def extend(self, iterable):
# 擴展列表 iterable (可迭代的) # 相當於批量添加
name_list = ["apache","nginx","tomcat","redis"]
num_list = [11,22,33,44]
name_list.extend(num_list)
print(name_list)
# ['apache', 'nginx', 'tomcat', 'redis', 11, 22, 33, 44]
可以使用加號將兩個列表相加,並重新付給一個新的變量,原來的列表都不會改變。
* :
重復操作,將本列表元素重負n次,返回新的列表
cc = name_list * 5
print(cc)
################################# index 獲取索引 ##################################
# def index(self, value, start=None, stop=None):
# 獲取某個元素的索引,默認不加是從左往右找,找到第一個即返回。
name_list = ["apache","nginx","tomcat","redis","hehe","nginx","redis","nginx"]
print(name_list.index("redis",4,7)) # 從下邊1開始,到下標6結束,不包括下標6
# 6
################################ insert 插入 ##################################
# def insert(self, index, p_object):
# 表示在指定索引的位置插入數據
name_list = ["apache","nginx","tomcat","redis"]
name_list.insert(1,"mysql") # 先輸入下標值,然后輸入你要插入值。
print(name_list)
# ['apache', 'mysql', 'nginx', 'tomcat', 'redis']
insert 輕易不要用。如果是在最前或者是中間進行插入的話,要一移動其后面的所有值。效率很低。
name_list = ["apache", "nginx", "tomcat", "redis"]
name_list.insert(100, '777') # 如果超過索引,就在最尾部添加
name_list.insert(-100, '777') # 如果是負索引超過了,就在開頭添加
################################ pop 末尾移除(就地修改) ##################################
# def pop(self, index=None):
# 沒有指定索引,默認是移除最后一個,並可以獲取刪除的值
name_list = ["apache","nginx","tomcat","redis"]
v = name_list.pop()
print(v)
# redis
# 在原來列表中移除到最后一個元素,並賦值給aa
name_list = ["apache","nginx","tomcat","redis"]
aa = name_list.pop(2) # 根據下標值(索引值進行移除)
print(aa)
# tomcat
print(name_list)
# ['apache', 'nginx', 'redis']
# 可以使用下標值
name_list = ["apache","nginx","tomcat","redis"]
print(name_list.pop(2),11111111111) # pop中可以跟下標,移除的就是下標的值。
# tomcat 11111111111
################################ remove 移除 ##################################
# def remove(self, value):
# 移除某個元素 默認只移除第一個從左邊匹配到的元素。
name_list = ["apache","nginx","tomcat","redis","apache","tomcat","apache"]
name2 = name_list.remove("apache") # 默認移除從左邊移除的第一個apache
print(name_list)
# [ nginx', 'tomcat', 'redis', 'apache', 'tomcat', 'apache']
################################ reverse 反轉 ##################################
# def reverse(self):
# 將當前列表進行反轉,也就是前后順序倒過來
name_list = ["apache","nginx","tomcat","redis"]
print(name_list.reverse())
print(name_list)
# ['redis', 'tomcat', 'nginx', 'apache']
################################ sort 排序 ##################################
# def sort(self, cmp=None, key=None, reverse=False):
reverse=Ture 為從大到小
reverse=False 為從小到大
# 將所有列表中的元素進行排序
name_list = ["apache","nginx","tomcat","redis","mysql"]
# cmp,key 參數先不進行講解,后期再調整更新
################################ del 刪除指定位置的元素 ##################################
name_list = ["apache","nginx","tomcat","redis","mysql"]
del name_list[1] # 刪除列表中下標為1的元素
print(name_list)
# ['apache', 'tomcat', 'redis', 'mysql']
name_list = ["apache","nginx","tomcat","redis","mysql"]
del name_list[1:3] #刪除列表中下標1到3的元素
print(name_list)
# ['apache', 'redis', 'mysql']
#################################################################################