您的位置:

python中关于列表的小案例(python列表笔记)

本文目录一览:

Python学习小技巧之列表项的排序

Python学习小技巧之列表项的排序

本文介绍的是关于Python列表项排序的相关内容,分享出来供大家参考学习,下面来看看详细的介绍:

典型代码1:

data_list = [6, 9, 1, 3, 0, 10, 100, -100]

data_list.sort()

print(data_list)

输出1:

[-100, 0, 1, 3, 6, 9, 10, 100]

典型代码2:

data_list = [6, 9, 1, 3, 0, 10, 100, -100]

data_list_copy = sorted(data_list)

print(data_list)

print(data_list_copy)

输出2:

[6, 9, 1, 3, 0, 10, 100, -100]

[-100, 0, 1, 3, 6, 9, 10, 100]

应用场景

需要对列表中的项进行排序时使用。其中典型代码1是使用的列表自身的一个排序方法sort,这个方法自动按照升序排序,并且是原地排序,被排序的列表本身会被修改;典型代码2是调用的内置函数sort,会产生一个新的经过排序后的列表对象,原列表不受影响。这两种方式接受的参数几乎是一样的,他们都接受一个key参数,这个参数用来指定用对象的哪一部分为排序的依据:

data_list = [(0, 100), (77, 34), (55, 97)]

data_list.sort(key=lambda x: x[1]) # 我们想要基于列表项的第二个数进行排序

print(data_list)

[(77, 34), (55, 97), (0, 100)]

另外一个经常使用的参数是reverse,用来指定是否按照倒序排序,默认为False:

data_list = [(0, 100), (77, 34), (55, 97)]

data_list.sort(key=lambda x: x[1], reverse=True) # 我们想要基于列表项的第二个数进行排序,并倒序

print(data_list)

[(0, 100), (55, 97), (77, 34)]

带来的好处

1. 内置的排序方法,执行效率高,表达能力强,使代码更加紧凑,已读

2. 灵活的参数,用于指定排序的基准,比在类似于Java的语言中需要写一个comparator要方便很多

其它说明

1. sorted内置函数比列表的sort方法要适用范围更广泛,它可以对除列表之外的可迭代数据结构进行排序;

2. list内置的sort方法,属于原地排序,理论上能够节省内存的消耗;

总结

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助

四、 python中的数据类型——列表

列表是一种有序的集合,有点类似c里面的数组。它的特点是,可以随时向里面添加或删除其中的元素,在python中经常用来存放数据。列表的特点是中括号,内部元素用逗号隔开。

在这个列表中,可以放进去任何元素,不论你的元素是字符串、整型、浮点型、还是布尔值、空值,包括列表什么的,都可以放进去。

元素与元素之间,用逗号隔开。

列表会为每个元素分配序号,这个序号代表它的位置,称为索引(index),第一个元素的位置是0,第二个元素是1,以此类推。

使用索引获取列表中的值时,需要使用中括号来访问,在中括号前面加上列表名,中括号内部是元素的索引。

0代表第一个元素的位置,1代表第二个,-1代表倒数第一个,-2代表倒数第二个

使用 len() 函数,可以查看列表里面有多少个元素

在python中,列表的操作是非常的灵活的,我们可以向其中添加或删除元素。

添加使用 list.append() 函数

list.append() 函数是将元素插入到列表的末尾,当我们想在特定位置插入元素时可以使用 list.insert() 函数

list.insert() 函数接受两个参数,第一个参数是插入位置,第二个参数是要插入的元素。

需要注意的是,在使用append和insert时,必须在前面注明要操作的列表。就像上面的例子,我们要操作classmates这个列表,所以必须写成 classmates.append() 或 classmates.insert() ,如果不这么写,计算机就不知道你要往哪个列表中加入元素。

没有特殊情况的话,推荐使用append()函数添加元素,因为使用append的时候,元素默认加在列表尾部,不会造成其他元素索引值的改变。如果使用insert的话,就像上面的insert(1,'Tom'),在位置1插入'Tom'后,Tom后面所有的元素,索引值都加了一个1,列表中元素越多,受影响的程度越大,因此使用append()函数要比insert()函数更快。

删除列表中元素的方法有三种

del后面需要用索引的方式表明要删除的元素,也就是上面的例子,names[1]代表names中的第二个元素,使用del即可删除

list.pop() 函数与del差不多,都是使用索引值进行删除,只不过写法不同。

我们可以发现,执行 names.pop(1) 后,python shell打印出了第二个元素的值,也就是我们要删除的那个值,这是因为 pop() 这个函数,是有返回值的,有时候我们需要使用这个值,这个时候就可以用变量存起来。

这样我们就可以通过调用a而使用刚才删掉的元素了。

list.remove() 函数的作用是删除第一个匹配的元素,上面的例子中,names这个列表里面,有两个'Bob',remove函数只删除了第一个'Bob'。这就是 list.remove() 函数的特点。

有时候我们想使用列表的前10个元素,或者前n个元素,这时候就应该使用列表的切片。

切片和索引类似,都是使用中括号,区别是,索引中的中括号里面只有一个数,而切片不同。切片是切割列表,形成切割下来的部分形成新的列表。

切片: list[start:end:[step=1]] ,这就是切片的表达式,要求start和end两者必须有一个,step不是可以不指定,不指定的时候默认为1。

切片该怎么理解呢,start就是开始的位置,end就是结束的位置。切片有个特点是“取前不取后”,看上面那个例子可以发现,1作为start,3作为end,1代表第二个元素,3代表第四个元素,列表切片的时候,是不取后面的那个数字对应的元素的,也就是不取第四个元素,所以names[1:3]只取了第二个元素和第三个元素,这就是所谓的取前不取后。

再看下一个例子。

当不指定start或者end的时候,start默认为0,end默认为最后一个元素的索引值+1,因为“取前不取后”,要想取到最后一个元素,必须加个1才行。

上例中,用 len(numbers) 表示了最后一个元素的索引值,因为索引值从0开始,最后一个元素的索引值一定是列表内元素个数-1,根据“取前不取后”,在end位置上的数字应该+1,所以最后就等于 len(numbers) 了。

当不设定start和end的时候,就默认取所有的元素了。

当加入step,这个选项后,step代表步长,默认为1,设定成2的时候,就是隔一个取一个,设定成3时就是隔两个取一个。

上例中,第一个切片,start和end均未设定,因此从第一个元素开始,隔一个取一个,得到了所有奇数位置的元素。

第二个切片,start设定为了1,因此取了所有偶数位置的元素。

3在列表中,0不在列表中,所以 3 in a 是True,而 0 in a 是False

更多关于列表的信息可以通过使用 help(list) 查看帮助文档。

eval 的用法,以及python中推导列表的案例

a = [[1,2,3],[2,4,5],[1,2,3]]

for i in range(len(a[0])):       第一种方法

...     a[0][i],a[1][i],a[2][i]               此为tuple形式

(1, 2,1)

(2, 4,2)

(3, 5,3)

for i in range(len(a[0])):

...   print([a[0][i],a[1][i],a[2][i]])       注意括号决定了输出 的形式

[1, 2,1]                                             

[2, 4,2]

[3, 5,3]

eval("a[0]")

[1, 2,3]

eval("a[0][0]")

1

eval("a[0][0],a[1][0],a[2][0]")

(1, 2,1)

a =[[1,2,3],[2,4,5],[1,2,3]]        第二种方法

s = ""                 定义一个 为s的字符串

l = []                 定义一个为l 的列表

for i in range(len(a[0])):i大循环是a[][]第二个括号里的值

...     for j in range(len(a)):j是a[][]第一个括号里的值

...         s += "a[%s][%s]," % (j,i)  输出的格式把前面的加上

...     l.append(s)  三个为一组添加到 l 列表里

...     s = ""        s字符串重新置空,开始第二次循环

...

l

     第一次循环结果               置空后第二次循环结果

['a[0][0],a[1][0],a[2][0],','a[0][1],a[1][1],a[2][1],','a[0][2],a[1][2],a[2][2],']

    置空后第三次循环结果

[eval(i) for i in l]   循环l里的三个元素 并输出结果

[(1,2, 1), (2, 4, 2), (3, 5, 3)]

I