2.列表

1.列表数据类型

  “列表”是一个值,它包含多个值构成的序列。
  术语“列表值”指的是列表本身(它作为一个值,可以保存在变量中,或传递给函数,像所有其他值一样),而不是指列表值之内的那
些值。列表值看起来像这样:['cat', 'bat', 'rat', 'elephant']。就像字符串值用引号来标记字符串的起止一样,列表用左方括
号开始,右方括号结束,即[ ]。列表中的值也称为“表项”。表项用逗号分隔。

2.切片

spam = ['cat', 'bat', 'rat', 'elephant']
spam[1:4]:是一个列表的切片。
在一个切片中,第一个整数是切片开始出的下标。第二个整数是切片结束处的下标。
切片向上增长,直到第二个下标的值,但不包括它。切片求值为一个新的列表值。
  >>>spam[0:4]
  ['cat', 'bat', 'rat', 'elephant']
  >>>spam[1:3]
  [ 'bat', 'rat']
  >>>spam[0:1]
  ['cat']
  >>>spam[0:-1]
 ['cat', 'bat', 'rat']
  作为快捷方式,可以省略切片中冒号两边的一个下标或两个下标。省略第一个下标
  相当于使用0,或列表的开始。省略第二个下标相当于使用列表的长度,以为这切片直到列表的末尾。
  >>>spam[:2]
  ['cat', 'bat']
  >>>spam[1:]
   ['bat', 'rat', 'elephant']
  >>>spam[:]
   ['cat', 'bat', 'rat', 'elephant']

3.用len()可以取得列表的长度

  len()函数将返回传递给它的列表值得个数,就像它能计算字符串中字符的个数一样(len('abc') 返回 3)
  >>>len(spam)
  4

4.用下标改变列表中的值

  >>>spam[1] = 'aaa'
  >>>spam
  ['cat', 'aaa', 'rat', 'elephant']
  >>>spam[2] = spam[1]
  >>>spam
  ['cat', 'aaa', 'aaa', 'elephant']
  >>>spam[-1] = 12345
  >>>spam
  ['cat', 'aaa', 'rat',12345]

5.列表连接和列表复制

  + 操作符可以连接两个列表,得到一个新列表,就像它将两个字符串合并成一个新的字符串。
  * 操作符可以用于一个列表和一个整数,实现列表的复制。
  >>>[1, 2, 3] + ['A', 'B', 'C']
  [1, 2, 3, 'A', 'B', 'C']
  >>> ['A', 'B', 'C'] * 3
  ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C']

6.用del语句从列表中删除值

  del 语句将删除列表中下标处的值,表中被删除值后面的所有值,都将向前移动一个下标。
  >>>spam =  ['cat', 'bat', 'rat', 'elephant']
  >>>del spam[2]
  >>>spam
  ['cat', 'bat', 'elephant']

7.列表用于循环

  >>>for i in [0, 1, 2, 3]:
              print(i)
  0
  1
  2
  3
  在每次迭代中,让变量一次设置为列表中的值。
  一个常见的Python技巧,是在for循环中使用range(len(someList)), 迭代列表的每一个下标。例如:
  >>>supplies = ['pens', 'staplers', 'flame-throwers', 'binders']
  >>>for i in range(len(supplies)):
                  print('Index ' + str(i) + ' in supplies is ' + supplies[i])
  Index 0 in supplies is pens
  Index 1 in supplies is staplers
  Index 2 in supplies is flame-throwers
  Index 3 in supplies is binders

8.in 和 not in 操作符

    利用in 和 not in 操作符可以确定一个值是否在列表中。像其他操作符一样, in 和 not in 用在表达式中,连接两个值:
  一个是要在列表中查找的值, 一个是待查找的列表。返回值为布尔型。
  >>>spam = ['hello', 'hi', 'howdy', 'heyes']
  >>>'cat' in spam
  False
  >>>'howdy' not in spam
  Flase

9.多重赋值技巧

  在一行代码中,可以用列表为多个变量赋值。例如:
  >>>cat = ['fat', 'black', 'loud']
  >>>size, color, disposition = cat
  >>> size
  'fat'
  >>> color
  'black'
  >>> disposition
  'loud' 
  变量的数目和列表的长度必须严格相等,否则Python将给出ValueError:
  >>>cat = ['fat', 'black', 'loud']
  >>>size, color, disposition, name = cat
    Traceback (most recent call last):
    File "<pyshell#55>", line 1, in <module>
      size, color, disposition, name = cat
    ValueError: not enough values to unpack (expected 4, got 3)

10.列表中的增强赋值操作(+=、*=)

+=操作符也可以完成字符和列表的连接,*=操作符可以完成字符串和列表的复制
>>>spam = 'Hello'
>>>spam += 'World'
>>>spam
'HelloWorld'
>>>bacon = ['Zophie']
>>>bacon *= 3
>>>bacon
['Zophie', 'Zophie', 'Zophie']

11.方法

1.用index()方法在列表中查找值

在index()方法中传入一个值,如果该值在列表中,就返回它的下标。如果不在,Python就报ValueError.
>>>spam = ['hello', 'hi', 'howdy', 'heyas']
>>>spam.index('hi')
1
如果列表中存在重复的值,就返回它第一次出现的下标。
>>>spam = ['hello', 'hi', 'howdy', 'hello']
>>>spam.index('hello')
 0

2.用append()和insert()方法在列表中添加值

>>>spam = ['cat', 'dog', 'bat']
>>>spam.append('moose')
>>>spam
['cat', 'dog', 'bat', 'moose']
append()方法是将参数添加到列表的末尾。
inset()方法可以在列表任意下标处插入一个值。inset()方法的第一个参数是新值的下标,第二个参数是要插入的新值。
>>> spam = ['cat', 'dog', 'bat']
>>> spam.insert(1, 'chicken')
>>> spam
['cat', 'chicken', 'dog', 'bat']

3.用remove()方法从列表中删除值

给remove()方法传入一个值, 它将从被调用的列表中删除。
>>> spam =  ['cat', 'bat', 'rat', 'elephant']
>>> spam.remove('bat')
>>> spam
['cat', 'rat', 'elephant']
如果试图删除列表中不存在的值, 将导致ValueError错误
>>> spam =  ['cat', 'bat', 'rat', 'elephant']
>>> spam.remove('chicken')
Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    spam.remove('chicken')
ValueError: list.remove(x): x not in list
如果该值在列表中出现了多次, 只有第一次出现的值会被删除。
>>> spam =  ['cat', 'bat', 'rat', 'cat', 'bat', 'rat']
>>> spam.remove('cat')
>>> spam
['bat', 'rat', 'cat', 'bat', 'rat']

**注**:如果知道想要删除的值在列表中的下标,用del语句删除,例如: del spam[2]
    如果知道想要从列表中删除的值,用remove()方法。例如:spam.remove('cat')

4.用sort()方法将列表中的值排序

数值的列表或者字符串的列表, 能用sort方法排序。
>>> spam = [2, 5, 3.14, 1, 7]
>>> spam.sort()
>>> spam
[1, 2, 3.14, 5, 7]
>>> spam = ['ants', 'cats', 'dogs', 'badgers', 'elephants']
>>> spam.sort()
>>> spam
['ants', 'badgers', 'cats', 'dogs', 'elephants']

也可以指定reverse关键字为True, 让sort()按逆序排列。
>>> spam.sort(reverse = True)
>>> spam
['elephants', 'dogs', 'cats', 'badgers', 'ants']

不能对既有数字又有字符串的列表进行排序,因为Python不知道如何比较它们,报TypeError
>>> spam = [1,3,2,4,'alice','bob']
>>> spam.sort()
Traceback (most recent call last):
  File "<pyshell#39>", line 1, in <module>
    spam.sort()
TypeError: '<' not supported between instances of 'str' and 'int'

sort()方法对字符串排序时, 使用"ASCII字符顺序", 而不是实际的字典顺序。这意味着大写字母排在小写字母之前。因此排序时,
小写字母a在大写字母Z之后。
>>> spam = ['Alice', 'ants', 'Bob', 'badgers', 'Carol', 'cats']
>>> spam.sort()
>>> spam
['Alice', 'Bob', 'Carol', 'ants', 'badgers', 'cats']
如果需要按照普通的字典顺序来排序的话,就在sort()方法调用时,将关键字参数key设置为str.lower转换为小写进行比较。
>>> spam = ['a', 'z', 'A', 'Z']
>>> spam.sort(key=str.lower)
>>> spam
['a', 'A', 'z', 'Z']
这将导致sort()方法将列表中所有的表项当成小写,但实际上并不会改变它们在列表中的位置。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容