python学习(11)—— python列表

02.06-lists

列表

索引和分片

事实上,对于连续的分片(即步长为 1 ),Python采用的是整段替换的方法,两者的元素个数并不需要相同,例如,将 [11,12] 替换为 [1,2,3,4]

a = [10, 11, 12, 13, 14]
a[1:3] = [1, 2, 3, 4]
print a

这意味着,可以用这种方法来删除列表中一个连续的分片:

a = [10, 1, 2, 11, 12]
print (a[1:3])
a[1:3] = []
print (a)
[1, 2]
[10, 11, 12]

对于不连续(间隔step不为1)的片段进行修改时,两者的元素数目必须一致:

a = [10, 11, 12, 13, 14]
a[::2] = [1, 2, 3]
a
[1, 11, 2, 13, 3]

否则会报错:

a[::2] = []
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

 in ()
----> 1 a[::2] = []


ValueError: attempt to assign sequence of size 0 to extended slice of size 3

列表方法

不改变列表的方法

列表中某个元素个数count

l.count(ob) 返回列表中元素 ob 出现的次数。

a = [11, 12, 13, 12, 11]
a.count(11)
2

列表中某个元素位置index

l.index(ob) 返回列表中元素 ob 第一次出现的索引位置,如果 ob 不在 l 中会报错。

a.index(12)
1

不存在的元素会报错:

a.index(1)
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

 in ()
----> 1 a.index(1)


ValueError: 1 is not in list

改变列表的方法

向列表添加单个元素

l.append(ob) 将元素 ob 添加到列表 l 的最后。

a = [10, 11, 12]
a.append(11)
print (a)
[10, 11, 12, 11]

append每次只添加一个元素,并不会因为这个元素是序列而将其展开:

a.append([11, 12])
print (a)
[10, 11, 12, 11, [11, 12]]

向列表添加序列

l.extend(lst) 将序列 lst 的元素依次添加到列表 l 的最后,作用相当于 l += lst

a = [10, 11, 12, 11]
a.extend([1, 2])
print (a)
[10, 11, 12, 11, 1, 2]

插入元素

l.insert(idx, ob) 在索引 idx 处插入 ob ,之后的元素依次后移。

a = [10, 11, 12, 13, 11]
# 在索引 3 插入 'a'
a.insert(3, 'a')
print (a)
[10, 11, 12, 'a', 13, 11]

移除元素

l.remove(ob) 会将列表中第一个出现的 ob 删除,如果 ob 不在 l 中会报错。

a = [10, 11, 12, 13, 11]
# 移除了第一个 11
a.remove(11)
print (a)
[10, 12, 13, 11]

弹出元素

l.pop(idx) 会将索引 idx 处的元素删除,并返回这个元素。

a = [10, 11, 12, 13, 11]
a.pop(2)
12

排序

l.sort() 会将列表中的元素按照一定的规则排序:

a = [10, 1, 11, 13, 11, 2]
a.sort()
print (a)
[1, 2, 10, 11, 11, 13]
a = [10, 1, 11, 13, 11, 2]
a.sort(reverse = True)
print (a)
[13, 11, 11, 10, 2, 1]

如果不想改变原来列表中的值,可以使用 sorted 函数:

a = [10, 1, 11, 13, 11, 2]
b = sorted(a)
print (a)
print (b)
[10, 1, 11, 13, 11, 2]
[1, 2, 10, 11, 11, 13]

列表反向

l.reverse() 会将列表中的元素从后向前排列。

a = [1, 2, 3, 4, 5, 6]
a.reverse()
print (a)
[6, 5, 4, 3, 2, 1]

如果不想改变原来列表中的值,可以使用这样的方法:

a = [1, 2, 3, 4, 5, 6]
b = a[::-1]
print (a)
print (b)
[1, 2, 3, 4, 5, 6]
[6, 5, 4, 3, 2, 1]

如果不清楚用法,可以查看帮助:

a.sort?
help(a.sort)
Help on built-in function sort:

sort(...) method of builtins.list instance
    L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*
a = np.array([1,2,3])
print (a)
print (a[1])
[1 2 3]
2
s = bytearray('abcde',encoding="utf-8")
s
bytearray(b'abcde')

数据类型分类:

可变数据类型 不可变数据类型
list, dictionary, set, numpy array, user defined objects integer, float, long, complex, string, tuple, frozenset
%timeit [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]
1000000 loops, best of 3: 189 ns per loop
%timeit?

你可能感兴趣的:(PYTHON)