查看list的形状

转为numpy.array后用.shape

  1. import numpy as np
  2. L = [[1,2],[3,4],[5,6],[7,8]]
  3. L = np.array(L)
  4. print(L.shape)
  5. # (4, 2)

list 和 np.array的区别

np.array里都是同一类元素,list则不一定。

  • 一个numpy array 是内存中一个连续块,并且array里的元素都是同一类(例如整数)。所以一旦确定了一个array,它的内存就确定了,那么每个元素(整数)的内存大小都确定了(4 bytes)。
  • list完全不同,它的每个元素其实是一个地址的引用,这个地址又指向了另一个元素,这些元素的在内存里不一定是连续的。所以list其实是只能塞进地址的“数组”,而且由于地址不用连续,每当我想加入新元素,我只用把这个元素的地址添加进list。

    创建list

    1、简单循环append
    1. my_list = []
    2. for i in range(50):
    3. my_list.append(0)
    2、简单循环+=
    1. my_list = []
    2. for i in range(50):
    3. my_list += [0]
    3、列表推导式
    1. my_list = [0 for i in range(50)]
    4、列表和整数乘法
    1. my_list = [0] * 50

    输出list倒序的三种方法

    1. lists = [1,3,4,5,6,7,9,2]
    2. # 切片
    3. print lists[::-1]
    4. # 函数reverse 对数组进行操作
    5. lists.reverse()
    6. print lists
    7. # 函数reversed 返回一个迭代对象,需要list化
    8. print list(reversed(lists))
    对[::-1]的理解:即最后一位到第一位,步长为-1。 ```python aa = ‘123456789’ ab = [1,2,3,4,5,6,7,8,9] ac = (1,2,3,4,5,6,7,8,9)

    str,list,tuple都可以切片,左闭右开

    print(aa[1:-2]) print(ab[1:-2]) print(ac[1:-2])

aa[x:y:z] z表示步长,不能为0,z<0时,x为空时默认为-1,即最后一位,y为空时默认为(-len(aa)-1),所以[::-1]表示最后一位到第一位,即倒序

print(aa[-1:-10:-1]) # 987654321 print(aa[::-1]) #987654321

  1. <a name="TBNpe"></a>
  2. #### list合并
  3. 1、a+b
  4. ```python
  5. a += b # a的值就变成了合并后的结果

2、a.extend(b)
和+=的结果一样
3、a.append(b)
将b看成list的一个元素和a合并成一个新的list。
4、a[0:0] = b
使用切片,合并后b处在a的前面。

在循环中删除list元素

因为删除元素后,整个列表的元素会往前移动,而i却是在最初已经确定了,是不断增大的,所以并不能得到想要的结果。
如果直接删,会报错,因为list还在循环。
1、遍历在新的列表操作,删除是在原来的列表操作。

  1. a = [1,2,3,4,5,6,7,8]
  2. print(id(a))
  3. print(id(a[:]))
  4. for i in a[:]:
  5. if i>5:
  6. pass
  7. else:
  8. a.remove(i)
  9. print(a)
  10. print('-------------------------')
  11. print(id(a))

2、filter

  1. a = [1,2,3,4,5,6,7,8]
  2. b = filter(lambda x: x>5,a)
  3. print(list(b))
  4. # [6, 7, 8]

3、列表解析

  1. a = [1,2,3,4,5,6,7,8]
  2. b = [i for i in a if i >5]
  3. print(b)

4、倒序删除
因为列表总是“往前移”,所以可以倒序遍历,即使后面的元素被修改了,还没有被遍历的元素和其坐标还是保持不变的。