列表
list 在 python 中具有非常强大的功能
定义
在python中,用方括号表示一个list:[]
在方括号里面,可以是 int,也可以是 str类型的数据,甚至也可以是Flase/True这样的布尔值
- 列表可以无限大,就是说list里面可以容纳的元素数量无限,当然这是在硬件设备理想的情况下。
在 java 中有一个跟 list 相似的数据类型-数组,但是两者之间还是有差别的。
在 java 中,数组的元素必须是基本数据类型中某一个,也就是相同数据类型,要么全是int类型,要么全是char类型等。不能一个数组中既有int类型又有char类型。这是因为java中的数组需要提前声明,声明的时候就确定了里面的类型。但是list中的元素数据类型确实任意的,可以是int、str、list,dict等。
- 列表、元组和字符串都是序列,序列的两个主要特点是索引操作符和切片操作符。
- 索引操作符让我们可以从序列中抓取一个特定项目
- 切片操作符让我们能够获取序列的一个切片,即一部分序列
索引和切片
在字符串中,索引号是以字符为单位确定的;而在list中,是以元素为单位
>>> a = 'hello.world'
>>> a[2]
'l'
>>> b = ['alpha','bete','gamma']
>>> type(b)
<type 'list'>
>>> b[2]
'gamma'
>>> b[:2] #跟str中的类似,切片的范围是:包含开始位置,到结束位置之前
['alpha', 'bete'] #不包含结束位置
>>> b[:2][1] #可以进行二次切片
'bete'
list和str两种类型的数据,有共同的地方,它们都属于序列(都是一些对象按照某个次序排列起来,这就是序列的最大特征),因此,就有很多类似的地方。如刚才演示的索引和切片,是非常一致的。
>>> a.index('h')
0
>>> b.index('bete')
1
如果从右边开始编号,右边第一个可以编号为-1,然后向左依次是:-2,-3,...,依次类推下来。这对字符串、列表等各种序列类型都是用。
>>> a[-1]
'd'
>>> b[-2]
'bete'
反转
这个功能在编程中经常会用到。
方法一
>>> b = ['alpha','bete','gamma']
>>> b[::-1]
['gamma', 'bete', 'alpha']
>>> b
['alpha', 'bete', 'gamma']
上述不管是str还是lst反转之后,再看原来的值,没有改变。这就说明,这里的反转,不是在“原地”把原来的值倒过来,而是新生成了一个值,那个值跟原来的值相比,是倒过来了。
方法二
使用 reversed() 函数
>>> b
['alpha', 'bete', 'gamma']
>>> reversed(b)
<listreverseiterator object at 0x059DC170>
>>> list(reversed(b))
['gamma', 'bete', 'alpha']
它返回一个可以迭代的对象
list基本操作
- len() 查看list中的元素个数
>>> b
['alpha', 'bete', 'gamma']
>>> len(b)
3
- + 连接两个列表
>>> b
['alpha', 'bete', 'gamma']
>>> len(b)
3
>>> c = ['apple','orange','banana']
>>> b + c
['alpha', 'bete', 'gamma', 'apple', 'orange', 'banana']
- * 重复元素
>>> b*2
['alpha', 'bete', 'gamma', 'alpha', 'bete', 'gamma']
- count 计算元素在列表中出现的次数
>>> b
['alpha', 'bete', 'gamma', 'delta', 'epsilon']
>>> b.count('a')
0
>>> b.count('alpha')
1
- in 成员运算符
>>> 'apple' in c
True
>>> 'apple' not in c
False
- max()、min() 用法和str中的一样,需要注意的是如果元素不是int类型,都是按照字符在ascii编码中所对应的数字进行比较的。
>>> max(b)
'gamma'
>>> min(b)
'alpha'
- append 将新的元素x追加到list的尾部。
>>> b
['alpha', 'bete', 'gamma']
>>> b.append('delta')
>>> b
['alpha', 'bete', 'gamma', 'delta']
>>> id(b)
94144512
>>> b.append('epsilon')
>>> b
['alpha', 'bete', 'gamma', 'delta', 'epsilon']
>>> id(b)
94144512
从上面可以看出,生成一个新的列表后,列表的地址没有发生变化,因此,可以说明
列表是可以修改的。这种修改,不是复制一个新的,而是在原地进行修改。
- insert 将元素插入到列表中,不是尾部
>>> b
['alpha', 'bete', 'gamma', 'delta', 'epsilon']
>>> b.insert(0,'zaeta')
>>> b
['zaeta', 'alpha', 'bete', 'gamma', 'delta', 'epsilon']
>>>
- list中的元素,不仅能增加,还能被删除。删除list元素的方法有两个,它们分别是:
- pop 删除最后一个元素并返回这个元素
>>> b
['zaeta', 'alpha', 'bete', 'gamma', 'delta', 'epsilon']
>>> b.pop()
'epsilon'
>>> b
['zaeta', 'alpha', 'bete', 'gamma', 'delta']
- remove 移除指定元素,没有返回值
>>> b
['zaeta', 'alpha', 'bete', 'gamma', 'delta']
>>> b.remove('delta')
>>> b
['zaeta', 'alpha', 'bete', 'gamma']