Python基础-列表

什么是列表?

列表是由一系列按照特定顺序排列的元素组成,直观理解就是:数组。 只不过python的列表有点特别,他不限制存储的元素类型,使用手感上来说反倒更像是对标Java中的ArrayList。

 

flowers = ['Rose','Lily','Jasmine','Rosemary']
print(flowers)

打印结果:
['Rose', 'Lily', 'Jasmine', 'Rosemary']

 

创建空列表:

flowers = []

 

访问元素

访问列表中的元素,都是用索引来访问,从0开始递增。

flowers = ['Rose','Lily','Jasmine','Rosemary']
print(flowers[0])

打印结果:
Rose

 

如果我要取最后一个元素呢?

其他编程语言的做法都是先取列表的总长度,然后总长度-1得到最后一个元素的索引。

在python里可以用-1来表示最后一个元素的索引:

flowers = ['Rose','Lily','Jasmine','Rosemary']
print(flowers[-1])

打印结果:
Rosemary

 

取倒数第二个元素:

flowers = ['Rose','Lily','Jasmine','Rosemary']
print(flowers[-2])

打印结果:
Jasmine

 

请注意:如果列表为空,那么访问最后一个元素会出错,同样的如果列表只有一个元素,访问倒数第二个元素也会出错。

 

字符串与列表

字符串是不是列表?

字符串就是由字符组成的序列,在某个视角上来看,字符串属于是一种特殊的列表,但是它不等于列表,只是python这门语言提供了一些独有的特性,使得我们可以用列表的操作方式来操作字符串。

word = 'abcdefg'
print(word[0])

打印结果:
a

 

字符串与列表的转换

字符串虽然可以看成列表,但是它与列表的数据类型,应用场景,表现方式都完全不同,所以有些时候我们需要类型转换。

 

字符串转列表:

word = 'abcdefg'
print(word)
print(list(word))

打印结果:
abcdefg
['a', 'b', 'c', 'd', 'e', 'f', 'g']

 

列表转字符串:

flowers = ['Rose','Lily','Jasmine','Rosemary']
print(flowers)
print(''.join(flowers))

打印结果:
['Rose', 'Lily', 'Jasmine', 'Rosemary']
RoseLilyJasmineRosemary

 

基础操作

在列表末尾添加元素 insert()

word = []
word.append('a')
word.append('b')
word.append(2)
word.append('c')
print(word)

打印结果:
['a', 'b', 2, 'c']

 

请注意:很多操作方法是直接改变列表本身,方法本身不会有返回值,需要仔细留意。

 

在列表中插入元素 insert()

word = ['a','b','c','d']
word.insert(1,'xxx')
print(word)

打印结果:
['a', 'xxx', 'b', 'c', 'd']

 

删除列表元素 del

word = ['a','b','c','d']
del word[1]
print(word)

打印结果:
['a', 'c', 'd']

 

弹出列表元素 pop()

pop是栈的标准操作,在这里python提供了这一方法,可以弹出列表中的元素,弹出来的元素可以用变量接收,进一步供业务逻辑使用,而原列表的改变与del删除元素相同,默认每次弹出列表末尾的元素。

word = ['a','b','c','d']
s = word.pop()
print(word)
print(s)

打印结果:
['a', 'b', 'c']
d

 

你也可以弹出任意位置的元素

word = ['a','b','c','d']
s = word.pop(0)
print(word)
print(s)

打印结果:
['b', 'c', 'd']
a

 

python没有提供push方法,但是我们不管是需要先进先出还是先进后出的数据结构,都可以用 insert + append + pop 三个方法进行组合完成。

 

根据值删除元素 remove()

如果你知道要删除的值,但是不知道他的下标,那么可以使用remove方法进行删除

word = ['a','b','b','c','d']
word.remove('b')
print(word)

打印结果:
['a', 'b', 'c', 'd']

 

如你所见,remove只能删除第一个值,如果你要删除的值可能在列表中出现多次,那么只能遍历处理。

 

获取列表长度 len()

word = ['a','b','c']
print(len(word))

打印结果:
3

 

元素在列表中出现的次数 count()

word = ['a','b','b','c','d']
i = word.count('b')
print(i)

打印结果:
2

 

合并列表 extend()

word = ['a','b','b','c','d']
num = [2,3,4]
word.extend(num)
print(word)

打印结果:
['a', 'b', 'b', 'c', 'd', 2, 3, 4]

 

实际上你也可以直接用加号 将两个列表相加

word = ['a','b','b','c','d']
num = [2,3,4]
all = word + num
print(all)

打印结果:
['a', 'b', 'b', 'c', 'd', 2, 3, 4]

 

不同之处是 一个是在原列表上做扩充,一个是新建一个列表进行装载。

 

组织列表

永久性排序 sort()

正序:

word = ['e','b','a','c','d']
word.sort()
print(word)

打印结果:
['a', 'b', 'c', 'd', 'e']

 

倒序:

word = ['e','b','a','c','d']
word.sort(reverse=True)
print(word)

打印结果:
['e', 'd', 'c', 'b', 'a']

 

临时性排序 sorted()

临时性排序不会改变原来的列表,而是sorted方法会返回一个排序后的结果列表。

word = ['e','b','a','c','d']
print(sorted(word))

打印结果:
['a', 'b', 'c', 'd', 'e']

 

同样的  倒序也是加上reverse参数:

word = ['e','b','a','c','d']
print(sorted(word,reverse=True))

打印结果:
['e', 'd', 'c', 'b', 'a']

 

实际上sorted可以传入任何序列,但它总是返回一个列表.

如下演示将一个字符串进行排序

word = 'ebdcgaf'
lis = sorted(word)
print(lis)
print(''.join(lis))

打印结果:
['a', 'b', 'c', 'd', 'e', 'f', 'g']
abcdefg

 

反转列表 reverse()

反转列表与排序无关,仅仅是将列表元素反向排列。

word = ['e','b','a','c','d']
word.reverse()

打印结果:
['d', 'c', 'a', 'b', 'e']

 

那如果想要恢复列表怎么办呢? 那就把反转之后的列表再反转,也就恢复了。

 

遍历列表

python中遍历的写法是for xx in list,末尾跟个冒号,第二行开始缩进,进入循环之中。

word = ['a','b','c']
for name in word:
    print('这个单词是:' + name)

打印结果:
这个单词是:a
这个单词是:b
这个单词是:c

 

for循环中的代码一律缩进,如果某一行没缩进,就代表出了循环了。

word = ['a','b','c']
for name in word:
    print('这个单词是:' + name)
print('已经循环完了哦')

打印结果:
这个单词是:a
这个单词是:b
这个单词是:c
已经循环完了哦

 

数字列表

快速生成 range()

你可以直接打印出一堆临时生成的数字,range方法的参数为起止数字,但是不包含结束数字。

for num in range(1,5):
    print(num)

打印结果:
1
2
3
4

 

range方法的结果并不是一个直接可用的数字列表,如果要转成列表,可以使用list方法将它转化一下。

 

nums = list(range(1,5))
print(nums)

打印结果:
[1, 2, 3, 4]

 

range还有第三个参数,可以指定步长

nums = list(range(1,11,2))
print(nums)

打印结果:
[1, 3, 5, 7, 9]

 

列表统计 min、max、sum

统计列表中的最小值、最大值、值总和

nums = [1,2,3,4,5]
print(min(nums))
print(max(nums))
print(sum(nums))

打印结果:
1
5
15

 

列表解析

以下代码为1-10这10个数字,按2步长取值,也就是1,3,5,7,9这五个数,每个数的平方组成一个列表

nums = []
for value in range(1,11,2):
    nums.append(value**2)
print(nums)

打印结果:
[1, 9, 25, 49, 81]

 

下面用列表解析的特性来进行改写

nums = [value**2 for value in range(1,11,2)]
print(nums)

 

虽然说列表解析的写法对初学者来说不易阅读,但是由于代码量少,在老手眼里反倒觉得这种写法简单直接,所以阅读到别人写的代码的时候,有时候会看到这种写法。

 

切片

切左切右切中间

除了使用索引来访问单个元素之外,还可以使用切片来访问指定范围内的元素

 

访问第2,3,4三个元素:

word = ['a','b','c','d','e','f']
print(word[1:4])

打印结果:
['b', 'c', 'd']

 

冒号前为开始切的索引,冒号后为结束的索引,但是不包含这个结束位置的元素。

 

如果你没有指定开始索引,那么切片将从0开始

打印前3个元素:

word = ['a','b','c','d','e','f']
print(word[:3])

打印结果:
['a', 'b', 'c']

 

同样的如果没有指定结束索引,那么切片将切到列表最后

打印第4个元素到最后:

word = ['a','b','c','d','e','f']
print(word[3:])

打印结果:
['d', 'e', 'f']

 

也可以使用负数

打印最后三个元素

word = ['a','b','c','d','e','f']
print(word[-3:])

打印结果:
['d', 'e', 'f']

 

猜一猜:如果-3改成-13,结果会如何呢?

 

切整个列表

切整个列表实际上得到的内容就是列表本身,一般是复制列表的时候会这么做。

word = ['a','b','c','d','e','f']
word2 = word[:]
print(word2)

打印结果:
['a', 'b', 'c', 'd', 'e', 'f']

 

带着步长切

切片默认的步长为1,所以切片范围是包含了所有元素,然而我们可以显式的指定步长。

从3到15,每3个元素切一个:

nums = list(range(0,20))
print(nums[3:16:3])

打印结果:
[3, 6, 9, 12, 15]

 

切全部,每2个切一个元素:

word = ['a','b','c','d','e','f']
print(word[::2])

打印结果:
['a', 'c', 'e']

 

切全部,每2个切一个元素,倒着切:

word = ['a','b','c','d','e','f']
print(word[::-2])

打印结果:
['f', 'd', 'b']

 

步长可以为负数,但是不能为0,步长为0就没法移动了。

 

列表运算

加法

两列表相加,其实就是两列表拼接,在上文讲合并列表的时候已经有提过。

list1 = ['a','b','c']
list2 = ['d','e','f']
print(list1 + list2)

打印结果:
['a', 'b', 'c', 'd', 'e', 'f']

 

两列表相加等于两列表拼接,两字符串相加等于两字符串拼接,但是字符串是不能和列表相加的。

 

乘法

将列表与一个整数x相乘,将返回一个原列表重复x次的新列表(如果x=0,那么将返回空列表)。

list1 = ['a','b','c']
print(list1 * 3)

打印结果:
['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']

 

字符串也可以这么玩:

name = 'abc'
print(name * 3)

打印结果:
abcabcabc

 

成员资格

检查一个值是否包含在列表中,可以使用运算符in,这是一个布尔运算符。

words = ['a','b','c','d']
if('c' in words):
    print('包含c')

打印结果:
包含c

 

如果要检查没有包含在列表中呢?用not来判断:

words = ['a','b','c','d']
if(not 'xxx' in words):
    print('这个xxx是没有的')

打印结果:
这个xxx是没有的

 

我们不仅可以检查列表,还可以检查字符串中是否包含某个字符串

words = 'abcdefg'
if('bc' in words):
    print('这个字符串包含了bc')

打印结果:
这个字符串包含了bc

 

元组

还有一种特殊的列表,是不可修改的,也就是从定义开始,就不可变的,这种不可变的列表,就叫做元组。

列表的表示方法是中括号:[],去掉中括号就是元组:

words = 'a','b','c'
print(words)

打印结果:
('a', 'b', 'c')

 

元组打印出来的效果就是两边被圆括号括起。

也许是考虑到可读性,python也允许你定义元组的时候用括号把内容括起,这种写法被普遍采用:

words = ('a','b','c')
print(words)

打印结果:
('a', 'b', 'c')

 

元组的值是不可修改的,就比如你想把('a','b','c')改成('a','c','c'),你如果words[1] = 'c'会报错,python不允许修改元组,但是你可以给变量重新赋值:words = ('a','c','c')

 

除了不能修改元组中值,其他使用方式都跟列表一模一样。

 

结语

本文涵盖了python列表的大部分常用知识点,还有一些其他操作比如clear(),copy(),index()等并未加以列出,感兴趣的朋友可以自行拓展。

 

posted @ 2020-06-18 23:07  不该相遇在秋天  阅读(215)  评论(0编辑  收藏