1.列表知识汇总

序列:基本的数据结构,序列中的每个元素都有编号(索引),第一个元素的索引是0,第二个元素的索引是1,依次类推
为什么从0计数:从0开始指出相对于序列开头的偏移量。同时可以绕到序列末尾,用负索引表示序列末尾元素的位置
eg1

# 列表中的元素可以不是同一种类型
edward = ["grid",1.0]
edward2 = ["bird",2]
print(edward)
print(edward2)
# 列表可以包含其他的列表
edward3 = [edward,edward2]
print(edward3)

['grid', 1.0]
['bird', 2]
[['grid', 1.0], ['bird', 2]]

列表操作

索引

#字符串就是由字符组成的序列
greet = "Hello"
print("第一个元素:"+greet[0])
#使用内建函数计算列表的长度,最后一个元素的索引是长度减一
print("最后一个元素:"+greet[len(greet)-1])
#最后一个元素的下标是-1,往前数是-2,-3...
print("倒数第二个元素:"+greet[-2])
#字符串以及其他的序列字面量,可以直接对其使用索引
print("第二个元素:"+"Hello"[1])
#如果函数返回一个序列,则函数也可以直接使用索引
four = input("please input a string : ")[3]
print("输入的字符串的第四个元素是:%s" %four)
第一个元素:H
最后一个元素:o
倒数第二个元素:l
第二个元素:e
please input a string : world
输入的字符串的第四个元素是:l

切片

使用切片来访问特定范围内的元素。可以使用两个索引,并用冒号 : 进行分隔。包含第一个索引指定的元素,不包含最后一个索引指定的元素

numbers = [1,2,3,4,5,6,7,8,9,10]
print(numbers[0:3])
#第二个索引超过实际的索引值,仍能正常打印
print(numbers[0:20])
print(numbers[-3:9])
#第一个索引的元素位置必须比第二索引的元素位置要小,否则打印空序列
print(numbers[-3:1])
#省略第一个索引,切片始于序列开头
print(numbers[:-3])
#省略第2个索引,切片结束与序列结尾,且包含最后一个元素
print(numbers[-3:])
#省略第一个,第二个索引,表示整个序列
print(numbers[:])
[1, 2, 3]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[8, 9]
[]
[1, 2, 3, 4, 5, 6, 7]
[8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

切片之步长

#全部的奇数,步长是2
print(numbers[0:10:2])
#全部的偶数,步长是2
print(numbers[1:10:2])
#步长为负,表示从右边向左边提取元素,且第一个索引必须大于第二个索引
print(numbers[10:0:-2])
#第六个元素到序列开始,然后反向提取
print(numbers[5::-2])
#从序列结尾到第六个元素(不包含),反向提取
print(numbers[:5:-2])
[1, 3, 5, 7, 9]
[2, 4, 6, 8, 10]
[10, 8, 6, 4, 2]
[6, 4, 2]
[10, 8]

序列相加

#用加运算符连接列表
list1 = ["h","e","l"]
list2 = ["l","o"]
list3 = list1 + list2
print(list3)
#不能拼接不同类型的序列
# TypeError: can only concatenate list (not "str") to list
str = "world"
list4 = list3 + str
print(list4)

序列乘法

#序列与数相乘表示重复这个序列来创建一个新的序列
pythons = "python " * 5
print(pythons)

world = ["bye","bye"]
byes = world * 2
print(byes)

空列表 [ ]
使用None 初始化列表

emptyList = []
noneList = [None] * 8
print("emptyList len = %s" %(len(emptyList))) #0
print("noneList len = %s" %(len(noneList)))  #8

成员包含

in 或 not in

father = "father"
print("fa" in father) #True
print("wa" in father) #False
print("wa" not in father)#True
fathers = ["foo","sd"]
print("foo" in fathers)#True
print("wan" in fathers)#False
print("han" not in fathers)#True

序列成员包含

database = [["li",123],["zhao",234],["qian",456]]
userName = input("please input your name : ")
password = input("please input your password : ")
#实际上database 中的123 是数值类型,所以要进行类型转化
password = int(password)
if [userName,password] in database :
    print("login success!")
else:
    print("login failure!")
please input your name : li
please input your password : 123
login success!

列表常用函数

函数list

#使用list 函数将字符串转为序列
str1 = "hello"
strToList = list(str1)
print(strToList)

#将序列转为字符串
list1 = ["w","o","r","l","d"]
listToStr = ','.join(list1)
listToStr2 = '!'.join(list1)
print("使用逗号隔开 : "+listToStr)
print("使用叹号隔开 : "+listToStr2)
['h', 'e', 'l', 'l', 'o']
使用逗号隔开 : w,o,r,l,d
使用叹号隔开 : w!o!r!l!d

给元素赋值

old = ["x","y","z"]
#使用空列表清空
old = []
old = "s"
#old = "s"后,old已经成为字符串类型,而字符串类型为不可变类型,所以old[0] = "w"报错
# old[0] = "w"
old = ["a","b","c"]
#修改第一个元素的值
old[0] = "d"
#['d', 'b', 'c']
print(old)

删除元素
删除单个元素和范围删除

old = ["a","b","d","f"]
#删除一个元素
del old[1]
#删除切片(范围)元素
print(old) #['a', 'd', 'f']
del old[-1:]
print(old) #['a', 'd']

切片赋值
eg1

hi = list("hi")
hi[1:] = "ello"
print("".join(hi)) #hello

eg2 插入新元素

old = ["a","b","d","f"]
#在第三个位置插入c
old[2:2] = "c"
print(old)#['a', 'b', 'c', 'd', 'f']

列表常用方法

  1. append
    就地修改原列表
#将一个对象附加到列表末尾
#在列表末尾加一个字符串
list1 = ["hello"]
list1.append("world")
print(list1)
#在列表末尾加一个列表
list1.append(["ha","hei"])
print(list1)
#在列表末尾加个元组
list1.append(("bye","bye"))
print(list1)
#在列表末尾加个数值
list11 = list1.append(3.14)
print(list1)
#看下apped返回的结果是什么?None
print(list11)
['hello', 'world']
['hello', 'world', ['ha', 'hei']]
['hello', 'world', ['ha', 'hei'], ('bye', 'bye')]
['hello', 'world', ['ha', 'hei'], ('bye', 'bye'), 3.14]
None
  1. clear
    就地清空原列表
list1 = ['hello', 'world']
listClear1 = list1.clear()
print(listClear1)
print(list1)
None
[]
  1. copy
    复制列表,会产生一个新的列表
#list3与list2关联,修改list3也会修改list2
list2 = ['hello', 'world']
list3 = list2
list3.append("how")
print(list2)
#list4 是list2的副本,修改list4之后不会修改list2
list4 = list2.copy()
list4.append("here")
print(list2)
print(list4)
['hello', 'world', 'how']
['hello', 'world', 'how']
['hello', 'world', 'how', 'here']
  1. count
    计算指定元素在列表中出现的次数
list5 = [1,2,3,1,1,1,2]
myC = list5.count(1)
#myC的类型是Int,与字符串连接时需要转化为字符串
print("1 在 list5 中出现的次数是:" + str(myC))
1 在 list5 中出现的次数是:4
  1. extend
    就地修改原列表,将多个值附加在列表末尾
list5 = [1,2,3,1,1,1,2]
list6 = list5.extend(["he","hea"])
print(list6)#None
print(list5)#[1, 2, 3, 1, 1, 1, 2, 'he', 'hea']
  1. index
    查找指定元素在序列中第一次的位置,如果没有找到会报错,所以最好先使用in 判断下要查内容是否在序列中是否存在,再求第一次出现时的索引
list7 = [1, 2, 3, 1, 1, 1, 2, 'he', 'hea']
if "he" in list7 :
    heIndex = list7.index("he")
    #通过下标获取列表中的元素
    heStr = list7[heIndex]
    print("在 list7 索引 %d 对应的元素是 : %s" %(heIndex,heStr))
else:
    print("he 在 list7中找不到")
在 list7 索引 7 对应的元素是 : he

可以在指定的范围中搜索index(object,start,end) 搜索范围包括start 不包括end

list7 = [1, 2, 3, 1, 1, 1, 2, 'he', 'hea']
#he 的下标是7,所以在3-8中可以找到
print("范围查询 %d"  %list7.index("he",3,8))
#由于结束位置是7,实际搜索的是从3-6,不会包含结束的索引位置,所以报错ValueError: 'he' is not in list
print("范围查询 %d" %list7.index("he",3,7))
  1. insert
    指定在列表某个位置插入对象,就地修改
list7 = [1, 2, 3, 1, 1, 1, 2, 'he', 'hea']
result1 = list7.insert(3,["bao","zha"])
print(list7) #[1, 2, 3, ['bao', 'zha'], 1, 1, 1, 2, 'he', 'hea']
print(result1) #None
  1. pop
    pop()从列表中删除最后一个元素,并将其返回
    pop(x) 从列表中删除索引x的元素,并将其返回
list7 = [1, 2, 3, 1, 1, 1, 2, 'he', 'hea']
#出栈列表第三个元素
popResult1 = list7.pop(2)
print(popResult1)
print(list7)
#出栈列表最后一个元素
popResult2 = list7.pop()
print(popResult2)
print(list7)
#还可以支持负数,最后一个元素是-1,倒数第二个是-2,依次类推
list8 = ['h','e','l','j','w']
print(list8.pop(-2))
3
[1, 2, 1, 1, 1, 2, 'he', 'hea']
hea
[1, 2, 1, 1, 1, 2, 'he']
j 
  1. remove
    就地删除,无返回值。删除列表中的指定元素,如果列表中不存在该指定元素,报错,所以也先用in查看下包含关系再做删除
list8 = "hello"
list9 = list(list8)
removeRes = list9.remove('e')
print(list8) #hello
print(removeRes)#None
print(list9) #['h', 'l', 'l', 'o']
  1. reverse
    就地反转,不返回值。
list10 = ["a","b","c","d"]
reverseRes = list10.reverse()
print(reverseRes) #None
print(list10)  #['d', 'c', 'b', 'a']
  1. sort
    就地排序,且不返回任何值。
list11 = ['a','b','h','c']
sortRes = list11.sort()
print(list11) #['a', 'b', 'c', 'h']
print(sortRes) #None
  1. sorted
    不修改原序列,而是返回一个排序后的序列
list12 = ['a','b','h','c']
#sorted()是python的内置函数,不是是list的函数所以直接使用,将列表作为sorted的参数
list13 = sorted(list12)
print(list12) #['a', 'b', 'h', 'c']
print(list13) #['a', 'b', 'c', 'h']
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,380评论 0 5
  • 列表属于容器存储、可变、顺序访问的数据类型。列表可以包含任何种类的对象或者嵌套,借助列表可以构造许多复杂的数据结构...
    梦回吹角连营阅读 735评论 0 4
  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 3,875评论 0 0
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,373评论 0 4
  • 这是近年看过的最好电影。以独特的世界观、叙事节奏和近乎完美的画面感重述了爱与梦想的永恒话题。 一些很重要的题外话,...
    萬幣猴阅读 485评论 0 0