列表

  • 在python中,用[]来表示列表,并用逗号来分割其中的元素。在交互式环境输入代码:
>>> ["cat",3.1415,True,None,42]
["cat",3.1415,Ture,None,42]
  • 列表是有序集合,因此要访问列表的任何元素,只需将该元素的下标(也叫索引)告诉python即可。索引是从0而不是从1开始。
    将一个列表赋值给一个spam,并使用索引取得对应的值,在交互是环境中代码如下:
>>> spam = ["cat","bat",3.14,True]
>>> spam[0]
"cat"
>>> spam[1]
"bat"
>>> spam[3]
True
  • 负数下标
    整数值 -1 指的是列表的最后一个元素。-2指的是倒数第二个元素,以此类推。在交互式环境中代码如下:
>>> spam[-1]
True
>>>spam[-2]
3.14
  • 利用切片取得子列表,“切片”可以从列表中取得多个值,结果是一个新列表。切片输入[]中,像索引一样,但是他有两个冒号分割的整数。
    spam[2] 一个列表和整数
    spam[1:4] 一个列表和两个整数
    在切片中,第一个整数是切片开始处的下标,第二个整数是切片结束处的下标。切片向上增长,直至第二个下标的值,但不包括它。在交互式环境中代码如下:
>>> spam = ['cat','bat','rat','elephant']
>>> spam[0:4]
['cat','bat','rat','elephant']
>>> spam[1:3]
['bat','rat']
  • 用len()取得列表的长度
>>> spam = ['cat','dog','moose']
>>> len(spam)
3
  • 使用下标该表列表中的值
>>> spam = ['cat','bat','rat','elephant']
>>> spam[0] = 'dog'
>>> spam
['dog','bat','rat','elephant']
  • 列表连接和列表复制
>>> [1,2,3] + [4,5,6]
[1,2,3,4,5,6,]
>>> [1,2,3] *3
[1,2,3,1,2,3,1,2,3,]
  • 用del语句从列表中删除值,删除列表中下标处的值。
>>> spam = ['cat','bat','rat','elephant']
>>> del spam[1]
>>> spam
['cat','rat','elephant']
  • 使用列表
    当你第一次开始编程时,很容易会创建许多独立的变量,来保存一组类似的值。例如:
cat_name1 = 'pooka'
cat_name2 = 'simon'
cat_name3 = 'zophie'
cat_name4 = 'miss cleo'
print('Ener the name of cat 1:')
cat_name1 = input()
print('Ener the name of cat 2:')
cat_name2 = input()
print('Ener the name of cat 3:')
cat_name3 = input()
print('The cat names are:')
print(cat_name1 + ' ' + cat_name2 + ' ' + cat_name3)

其实不必创建多个重复的变量,可以使用单个变量,包含一个列表值。下面改进上面的程序,使用列表可以保存用户输入的任意多的猫。

cat_names = []
while True:
    print('Enter the name of cat ' + str(len(cat_names)+1) + '(Or enter nothing to stop.):')
    name = input()
    if name == '':
        break
    cat_names.append(name)
print('The cat names are:')
for name in cat_names:
    print(' ' + name)

使用列表的好处在于,数据放在一个结构中,程序能更灵活的处理数据,比放在一些复杂的变量中方便。

  • 列表用于循环
supplies = ['pens','staplers','flame','binders']
for i in range(len(supplies)):
    print('Index ' + str(i) + ' in supplies is:' + supplies[i])
  • in和not in操作符
    经典代码是列表去重,例如:
numbers = [1,7,3,2,5,6,2,3,4,1,5]
new_numbers = []
for x in numbers:
    if x not in new_numbers:
       new_numbers.append(x)
print(new_numbers)
  • 多重赋值技巧,使用列表中的值为多个变量赋值。
# 单项赋值
cat = ['fat','black','loud']
size = cat[0]
color = cat[1]
disposition = cat[2]
# 多重赋值
cat = ['fat','black','loud']
size,color,disposition = cat

多重赋值,变量的数目和列表的长度必须严格相等。

  • 增强操作符
spam += 1  等价 spam = spam + 1
spam -= 1   等价 spam = spam - 1
spam *= 1   等价 spam = spam * 1
spam /= 1   等价 spam = spam / 1
spam %= 1  等价 spam = spam % 1
  • 方法和函数是一回事,只是他是调用在一个值上。像spam.index('hello'),方法部分跟在这个值后面,以一个句点分割。
1.index()返回元素在列表中的下标
2.append()将参数添加到列表的末尾
3.insert()第一个参数是新值的下标,第二参数是要插入的新值
4.remove()方法传入一个值,它将从被调用的列表中删除。如果该值在列表中出现多次,只有第一次出现的值会被删除。
5.sort()将列表中的值排序(当场排序),默认顺序:
  数字按照从小到大;
  字符串使用“ASCLL字符顺序”,而不是实际的字典顺序,这意味着大写字母排在小写字母前;
  既有数字又有字符串值的列表排序会报错。

  指定reverse关键字参数为Ture让sort()按逆序排列;例如 sapm.sort(reverse=Ture)
  如果需要按照普通的字典顺序排序,在sort()方法调用时,将关键字参数key设置为str.lower。例如: spam.sort(key=str.lower)将所有的表项当成小写,不会改变列表中的值。
  • 元组,不可变的数据类型,元组输入时用圆括号(),用逗号分割。
>>> type(('hello',))
<class 'tuple'>
>>> type(('hello'))
<class 'str'>

type(),输出括号内的数据类型

  • list()和tuple()转换数据类型
>>> tuple(['cat','dog',5])
('cat','dog',5)
>>> list(('cat','dog',5))
['cat','dog',5]
  • 引用,当将列表赋值给一个变量时,实际上是将列表的‘引用’赋给了变量。引用是一个值,指向某些数据。列表引用是指向一个列表的值。
>>> spam = [1,2,3,4,4]
>>> cheese = spam
>>> cheese[1] = 'hello'
>>> spam
[1,'hello',3,4,4]
>>> cheese
[1,'hello',3,4,4]

变量保存可变数据类型的值时,例如列表或字典,python就使用引用。对于不可变的数据类型的值,例如字符串、整型或元组,python变量就保存值本身。

  • copy模块的copy()和deepcopy()函数
>>> import copy
>>> spam = ['A','B','C','D']
>>> cheese = copy.copy(spam)
>>> cheese[1] = 42
>>> spam
['A','B','C','D']
>>> cheese
['A',42,'C','D']

如果要赋值的列表包含了列表,则使用deepcopy()函数代替。该函数将同事复制他们内部的列表。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容