MyPython-->基础篇-->列表

列表是由一系列按特定顺序排列的元素。 

1 name = ['cc',1,'yy',(2,3),'fly']
2 print(name[0])#cc
3 print(name[3][0])#2

 既然是有序的我们就可以通过索引来获得,name[]。 从上述代码中我们可以看出,列表可以存储,数字字符串元组甚至列表字典。

 访问name列表内索引为3的元组,我们可以再加一个索引访问到元组内的值。

 len()方法获得列表长度len(name)

删除元素

1.del

当我们删除后不再调用该值时使用

 del name[0]  删除name列表的索引为0的值,只有当我们知道索引位置时可以用到del,删除后我们将无法访问到它

2.pop()

如果我们删除一个值后还要访问他的值,我们可以用pop()方法

1 p1 = name.pop(0)
2 print(name,p1)#[1, 'yy', (2, 3), 'fly'] cc
3 print(name.pop())#fly

同样pop()方法也通过索引位置删除元素,如果没填索引位置的话会默认列表末尾。代码第一行中我们可以看到,pop()方法会返回删除的值,我们可以赋值给变量,进行调用

3.remove()

前两种方法都是用索引删除元素的,remove()方法是通过元素值来删除的。

1 cars = ['bmw','qq','byd']
2 cars.remove('qq')
3 print(cars)

remove("qq")括号内传入需要删除的值得元素.值得注意的是,remove()方法值删除第一个指定的值,如果要都删干净要循环判断是否删除了所有的这样的值

增加元素

1 team = ['RNG','EDG','OMG']
2 team.append('IM')
3 print(team)

append()方法,在列表的最后一个位置添加元素

替换元素

insert()方法,在指定位置加入元素,第一个参数索引位置,第二个参数值

team.insert(0,'White')

排序

1 grade_scort = [1,2,8,6,'a','A','b','y','a','A']
2 num_sc  = grade_scort[:4]
3 print('scorted 临时排序结果%s' % sorted(num_sc))
4 print('scorted 排序后列表%s' % num_sc)

 sorted()方法和sort方法

sorted(num_sc)对列表进行临时性的排序,不会改变原列表。

1 num_sc.sort()
2 print('sort排序后原num_sc %s' % num_sc)

num_sc.sort 对列表进行排序通过第二行输出可以看出,改变了列表

我们不仅可以对数字进行排序,还可以对字母排序(按ascii码进行排序),ascii码中a和A所转换成的数字是不一样的

a_sort = grade_sort[5:]
print(a_sort)#['A', 'b', 'y', 'a', 'A']
a_sort.sort()
print(a_sort)#['A', 'A', 'a', 'b', 'y']
for x in grade_sort[5:]:
    print('%s 对应的数字是 %s' % (x,ord(x)))

可以看出大写所对应的整数比小数要小,通过for循环我们也得到了对应的整数。

sort和sorted默认的排序都是由小到大,我们要从大到小怎么办呢,可以增加参数  reverse默认=False 由小到大,改为True就是由大到小

num_sort.sort(reverse = True)
print(num_sort)

反向打印列表

reverse() 这里说到的反向打印说的是索引位置反向打印,而不是排序反向打印需要注意

num_sort.reverse()

 创建数字列表

 不得不提到range()函数,python中range函数可以轻松生成一系列的数字

我们可以通过如下方式获得

1 print('range(10)生成的数字')
2 for x in range(10):
3  print(x,end=' ')
4 print('\nrange(1,11)生成的数字')
5 for x in range(1,11):
6  print(x,end = ' ')
7 print('\nrange(1,11,2)生成的数字')
8 for x in range(1,11,2):
9  print(x,end = ' ')

当我们只传入一个数字时比如range(10),range函数会默认从0开始生成,同样的顾头不顾尾。0-9。

那我们想获得1-10怎么办呢,可以再传入一个参数,range(1,11)这样就能得到,1-10

我们甚至可以控制,获得数的间隔,想获得奇数可以再传入第三个参数 range(1,11,2)。 

可以看到我在,print函数内传入了end。因为没输出一个就要换一行。我们可以通过end = ''来阻止换行。如果没填的话默认是换行,我们换成 end = ' '。这样每输出一个就加一个空格

我们通过type()发现range()返回的是range类型,我们要怎么获得一个数字列表呢,可以使用list()方法

list1 = list(range(1,11,2))

练习: 获得1-10的平方数组

1 list1 = []
2 for x in range(1,11):
3     square = x*x
4     list1.append(square)
5 print(list1)

通过第一行代码,创建一个空的列表

通过for循环,将1-10的平方添加到列表内。

为了简化代码,我们不用square变量,直接写在append里可以这样写。 提一下 python通过**代表幂,比如平方x**2

1 list1 = []
2 for x in range(1,11):
3     list1.append(x**2)
4 print(list1)

在python中有很多对数字列表进行操作的函数比如

1 list2 = [1,9,22,10,35,100]
2 print('数组最大值',max(list2))
3 print('数组最小值',min(list2))
4 print('数组和',sum(list2))

列表解析

前面生成一个数字列表需要3 4 行代码,而列表解析让你只需要一行代码就能生成这样的列表。列表解析将for循环和创建新元素合并成一行,并自动附加新元素。

1 square1 = [x**2 for x in range(1,11)]
2 print(square1)

列表同样可以使用切片,获取列表内的片段。

复制一个列表

square2 = square[:]

 这里是通过切片获得,square1的全部元素。我们为什么不用=呢

 1 square1 = [x**2 for x in range(1,11)]
 2 print(square1)
 3 
 4 square2 = square1[:]
 5 square1.append('s1')
 6 square2.append('s2')
 7 print('切片赋值,s1 显示',square1)
 8 print('切片赋值,s2 显示',square2)
 9 
10 square3 = square1
11 square1.append('end1')
12 square3.append('end3')
13 print('直接用s3=s1,s1 显示',square1)
14 print('直接用s3=s1,s3 显示',square3)

通过运行上述代码,我们发现通过切片赋值对新列表操作不会影响原列表。而通过=创建的列表,对其操作会影响原列表。  我们最好使用切片对一个列表进行复制

 

posted @ 2016-08-26 17:37  notJoke  阅读(192)  评论(0编辑  收藏  举报