03.列表操作

2018-10-18  本文已影响19人  杨强AT南京

列表的操作

  1. 基本操作
  2. 列表迭代与解析
  3. 索引与分片
  4. 列表数据操作
  5. 其他操作

1. 基本操作

# 1. 长度
print ( len ( [ 1, 2, 3, 4, 5 ] ) )

# 对多维,返回第一维长度
print ( len ( [ 
    [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ],
    [ 9, 8, 7 ]
] ) )
5
4
# 2. 列表复制
print  ( [ 1, 2, 3, 4 ] * 3 )

print ( [
    [ 1, 2, 3 ],
    [ 4, 5, 6 ]
] * 2 )
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
[[1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6]]
# 3. 列表合并
print  ( [ 1, 2, 3 ] + [ 4, 5, 6, 7 ] )

#如果是矩阵,则是行列表合并
print ( [      
    [ 1, 2, 3 ],
    [ 4, 5, 6 ]
]+[
    [ 7, 8, 9, 0 ],
    [ 9, 8, 7 ],
    [ 6, 5, 4, 0 ]
])
[1, 2, 3, 4, 5, 6, 7]
[[1, 2, 3], [4, 5, 6], [7, 8, 9, 0], [9, 8, 7], [6, 5, 4]]

2. 列表迭代与解析

#  1.迭代
for  i in  [ 1, 2, 3, 5 ]:
    print ( i )

#按照行迭代
for item in [
    [ 1, 2, 3, 4],
    [ 5, 6, 7, 8]
]:
    print ( item )
1
2
3
5
[1, 2, 3, 4]
[5, 6, 7, 8]
# 2.成员检测
print ( 3 in [ 1, 2 ,3 ] )

# 检测的是行,而不是其中的元素
print ( 3 in [ 
    [ 1, 2, 3 ],
    [ 4, 5, 6]
])

#行检测
print ( [ 1, 2, 3 ] in [ 
    [ 1, 2, 3 ],
    [ 4, 5, 6]
])
True
False
True
# 3. 列表解析
print ( [ x+1 for x in [ 1, 2, 3, 4] ] )
[2, 3, 4, 5]

3. 索引与分片

# 1. 按照正向位置索引(从0开始)
print ( [ 1, 2, 3, 4 ] [1] )

# 多维取行
print ( [ 
    [ 1, 2, 3, 4 ],
    [ 5, 6, 7, 8 ],
    [ 9, 1, 2, 3 ]
] [ 1 ] )


2
[5, 6, 7, 8]
4
[9, 1, 2, 3]
# 2. 按照反向位置索引(从1开始,-1表示最后后一个。)
print ( [ 1, 2, 3, 4 ] [ -1 ] )

print ( [ 
    [ 1, 2, 3, 4 ],
    [ 5, 6, 7, 8 ],
    [ 9, 1, 2, 3 ]
] [ -1 ] )
4
[9, 1, 2, 3]
# 3. 多维索引
print ( [ 
    [ 1, 2, 3, 4 ],
    [ 5, 6, 7, 8 ],
    [ 9, 1, 2, 3 ]
] [ -1 ] [ -1 ])
3

切片的语法
[ start : end : step ]

# 4. 切片( [ 开始位置 : 结束位置 ] ) 不包含结束位置的元素
print ( [ 1, 2, 3, 4, 5, 6] [ 1 : 3 ] )

print ( [ 1, 2, 3, 4, 5, 6] [ 1 :  -1 ] )
print ( [ 1, 2, 3, 4, 5, 6] [ 1 :  ] )    #最后默认是-1
print ( [ 1, 2, 3, 4, 5, 6] [  : 3 ] )    #前面默认是0
print ( [ 1, 2, 3, 4, 5, 6] [  :  ] ) 

#step的使用:反向
print ( [ 1, 2, 3, 4, 5, 6] [  :  : -1 ] )    #第一个是-1,最后一个是0
print ( [ 1, 2, 3, 4, 5, 6] [  5  :  2 :  -1 ] )    #step为负,切片也也需要反向。
[2, 3]
[2, 3, 4, 5]
[2, 3, 4, 5, 6]
[1, 2, 3]
[1, 2, 3, 4, 5, 6]
[6, 5, 4, 3, 2, 1]
[6, 5, 4]
# 5. 多维切片
print ( [ 
    [ 1, 2, 3, 4, 5, 6],
    [ 7, 8, 9, 8, 7, 6],
    [ 5, 4, 3, 2, 1, 0],
    [ 1, 2, 3, 4, 5, 6],
][ 1 : 3 ]  [ 1 : 2 ])

#下面语法列表是不支持的( 列表下标与切片不支持元组语法 )
# print ( [ 
#     [ 1, 2, 3, 4, 5, 6],
#     [ 7, 8, 9, 8, 7, 6],
#     [ 5, 4, 3, 2, 1, 0],
#     [ 1, 2, 3, 4, 5, 6],
# ] [ 1 : 3, 1 : 2 ] )

#不支持上述语法,就意味不支持取矩阵中的子矩阵。
[[5, 4, 3, 2, 1, 0]]

4. 列表数据操作

这里列表操作是修改原列表的值,这是列表(mutable)与元组(immutable)的区别。

# 1. 插入数据+ 与append
# 末尾插入
print  ( [ 1, 2, 3 ] + [4] )  #返回的应该是新的列表
#append的使用
help(list.append)
#L.append(object) -> None -- append object to end
print  ( [ 1, 2, 3 ].append ( [4] ) )  #append不会返回新的列表,而是在列表本身进行操作

lt = [ 1, 2, 3 ]
lt.append ( 4 )
print ( lt )
lt.append ( [ 4 ] )
print ( lt )


[1, 2, 3, 4]
Help on method_descriptor:

append(...)
    L.append(object) -> None -- append object to end

None
[1, 2, 3, 4]
[1, 2, 3, 4, [4]]
Help on method_descriptor:

extend(...)
    L.extend(iterable) -> None -- extend list by appending elements from the iterable

[1, 2, 3, 4, [4], 4]
Help on method_descriptor:

insert(...)
    L.insert(index, object) -- insert object before index

[1, 2, 8, 3, 4, [4], 4]
Help on method_descriptor:

pop(...)
    L.pop([index]) -> item -- remove and return item at index (default last).
    Raises IndexError if list is empty or index is out of range.

8
[1, 2, 3, 4, [4], 4]
# 2. 插入数据:extend
# 把列表当元素添加
help(list.extend)
# L.extend(iterable) -> None -- extend list by appending elements from the iterable
lt.extend ( [ 4 ] )
print( lt )

Help on method_descriptor:

extend(...)
    L.extend(iterable) -> None -- extend list by appending elements from the iterable

[1, 2, 3, 4, [4], 4, 4]
#插入数据:insert
help ( list.insert )
lt.insert(2, 8 )
print( lt )

Help on method_descriptor:

insert(...)
    L.insert(index, object) -- insert object before index

[1, 2, 8, 3, 4, [4], 4, 4]
# 2. 修改数据:索引修改
help ( list.__setitem__ )
ls = [ 1, 2, 3 ]
ls [ 1 ] = 8
print ( ls )

als = [
    [ 1, 2, 3 ],
    [ 4, 5, 6]
]
als [ 0 ] = 8
print ( als )

als [ 1 ] = [ 8 ]
print ( als )

Help on wrapper_descriptor:

__setitem__(self, key, value, /)
    Set self[key] to value.

[1, 8, 3]
[8, [4, 5, 6]]
[8, [8]]
# 2. 修改数据:切片修改(先删除,再插入)
ls = [ 1, 2, 3 ]
ls [ 0 : 1 ] = [ 8, 9 ,7]
print ( ls )
[8, 9, 2, 3]
# 3. 删除数据:pop
#删除位置2的元素,返回元素
help(list.pop)
#L.pop([index]) -> item -- remove and return item at index (default last).
print(lt.pop(2))  #不带参数,默认-1
print(lt)
# 3. 删除数据:clear
help ( list.clear )
ls = [ 1, 2, 3 ]
ls.clear()
print(ls)
Help on method_descriptor:

clear(...)
    L.clear() -> None -- remove all items from L
# 3. 删除数据:remove
help ( list.remove )
ls = [ 1, 2, 3 ]
ls.remove ( 2 )
print( ls )
Help on method_descriptor:

remove(...)
    L.remove(value) -> None -- remove first occurrence of value.
    Raises ValueError if the value is not present.

[1, 3]

5.其他操作

# 1. 排序:sort
help ( list.sort )
print ( [ 1, 4, 6, 3 ].sort( ) ) #不会产生新的列表

ls =  [ 1, 4, 6, 3 ]
ls.sort ( )
print ( ls )
ls.sort ( reverse = True )
print ( ls )
Help on method_descriptor:

sort(...)
    L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*

None
[1, 3, 4, 6]
[6, 4, 3, 1]
# 2. 逆序:reverse
help ( list.reverse )
ls =  [ 1, 4, 6, 3 ]
ls.reverse ( )
print ( ls )

Help on method_descriptor:

reverse(...)
    L.reverse() -- reverse *IN PLACE*

[3, 6, 4, 1]
# 3. 返回索引:index
help ( list.index )
print ( [ 1, 4, 6, 3 ] . index ( 4 ) )
Help on method_descriptor:

index(...)
    L.index(value, [start, [stop]]) -> integer -- return first index of value.
    Raises ValueError if the value is not present.

1
1
[1, 4, 6, 3]
# 4. 元素计数
help ( list.count )
print ( [ 1, 4, 6, 3, 4 ] . count ( 4 ) )
Help on method_descriptor:

count(...)
    L.count(value) -> integer -- return number of occurrences of value

2
# 5. 返回内存字节大小
print( [ 1, 2 ] . __sizeof__ ( ) )     #列表数据内存大小 ( 指针管理 )

import sys
sys . getsizeof ( [1, 2 ] )   #列表对象的内存大小( 指针管理 )
48





72
#list的帮助参考
help ( list )
Help on class list in module builtins:

class list(object)
 |  list() -> new empty list
 |  list(iterable) -> new list initialized from iterable's items
 |  
 |  Methods defined here:
 |  
 |  __add__(self, value, /)
 |      Return self+value.
 |  
 |  __contains__(self, key, /)
 |      Return key in self.
 |  
 |  __delitem__(self, key, /)
 |      Delete self[key].
 |  
 |  __eq__(self, value, /)
 |      Return self==value.
 |  
 |  __ge__(self, value, /)
 |      Return self>=value.
 |  
 |  __getattribute__(self, name, /)
 |      Return getattr(self, name).
 |  
 |  __getitem__(...)
 |      x.__getitem__(y) <==> x[y]
 |  
 |  __gt__(self, value, /)
 |      Return self>value.
 |  
 |  __iadd__(self, value, /)
 |      Implement self+=value.
 |  
 |  __imul__(self, value, /)
 |      Implement self*=value.
 |  
 |  __init__(self, /, *args, **kwargs)
 |      Initialize self.  See help(type(self)) for accurate signature.
 |  
 |  __iter__(self, /)
 |      Implement iter(self).
 |  
 |  __le__(self, value, /)
 |      Return self<=value.
 |  
 |  __len__(self, /)
 |      Return len(self).
 |  
 |  __lt__(self, value, /)
 |      Return self<value.
 |  
 |  __mul__(self, value, /)
 |      Return self*value.
 |  
 |  __ne__(self, value, /)
 |      Return self!=value.
 |  
 |  __new__(*args, **kwargs) from builtins.type
 |      Create and return a new object.  See help(type) for accurate signature.
 |  
 |  __repr__(self, /)
 |      Return repr(self).
 |  
 |  __reversed__(...)
 |      L.__reversed__() -- return a reverse iterator over the list
 |  
 |  __rmul__(self, value, /)
 |      Return value*self.
 |  
 |  __setitem__(self, key, value, /)
 |      Set self[key] to value.
 |  
 |  __sizeof__(...)
 |      L.__sizeof__() -- size of L in memory, in bytes
 |  
 |  append(...)
 |      L.append(object) -> None -- append object to end
 |  
 |  clear(...)
 |      L.clear() -> None -- remove all items from L
 |  
 |  copy(...)
 |      L.copy() -> list -- a shallow copy of L
 |  
 |  count(...)
 |      L.count(value) -> integer -- return number of occurrences of value
 |  
 |  extend(...)
 |      L.extend(iterable) -> None -- extend list by appending elements from the iterable
 |  
 |  index(...)
 |      L.index(value, [start, [stop]]) -> integer -- return first index of value.
 |      Raises ValueError if the value is not present.
 |  
 |  insert(...)
 |      L.insert(index, object) -- insert object before index
 |  
 |  pop(...)
 |      L.pop([index]) -> item -- remove and return item at index (default last).
 |      Raises IndexError if list is empty or index is out of range.
 |  
 |  remove(...)
 |      L.remove(value) -> None -- remove first occurrence of value.
 |      Raises ValueError if the value is not present.
 |  
 |  reverse(...)
 |      L.reverse() -- reverse *IN PLACE*
 |  
 |  sort(...)
 |      L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |  
 |  __hash__ = None

资源

本主题使用ipython notebook编辑,最后导出为markdown。
文件列表:
ipybn文件: list_operation.ipynb

上一篇 下一篇

猜你喜欢

热点阅读