List那点事

浏览: 947

在Python中,非常重要也是常用的数据类型就是list了。在Python中,string类型是由单引号或者双引号引起来的一系列的字符。比如:“hello”, “8.397”, “7”, ‘34’等。而相对应的,list类型是由方括号括起来的一系列的对象。比如:[0, 1, 2, 3],[“Alice”, “Bob”, “Catherine”],[“hello”, 4.567, True, ‘bye’]等。我们可以从例子中发现,即使是不同的数据类型,也可以组成一个list。

如何获取list中的对象呢?这是相当简单的,可以通过list中的对象的索引来进行获取,如:

image.png

思考一下,L = [“hello, Pavan”, [22, 0], 15],那么L[0][4] =?L[1][0] =?

在L中,我们发现,L[0]是一个字符串“hello, Pavan”,索引为4的字符是o,所以L[0][4] = “o”。而L[1]是个list,list中是整型数据,索引为0的整型数据是22,所以L[1][0] = 22。

那么,如何知道list中有多少个对象呢?同样进行类比,在string中,len(s)可以获取字符串s的长度,而len(L)则获取list L的对象的个数。如len([]) = 0, len([34, 12, 45]) = 3,len(“hello”) = 5。所以,list L中所有对象的索引是从0到len(L)-1。

如何打印list中是所有数据呢?相信有了之前的基础,能够一气呵成写好代码:

L = ["hi", 109, "go", 111, 1.16, [122,30], "hello"]
i = 0
while i < len(L):
   print(L[i])
   i = i + 1

通常,我们使用list比较常用的场景会是判断一个对象是不是在这个list中。那么,如何定义一个函数来完成此功能呢?

在设计函数的过程中,我们通常需要考虑的最重要的两个因素是参数和返回值。我们的功能是“判断一个对象是不是在这个list中”,从这句话中我们可以看出是需要两个参数,即list以及某个对象。而返回值呢?也从这句话可以看出,是不是在这个list中,故返回值有两个,是或者否,用布尔类型可以实现。函数的定义如下:

# tests if a given element is a member of a given list.
# Returns True if element is a member; False otherwise.
def isMember(L, elem):
   i = 0 # i serves as the index into list L
   # Iterate through the elements of the list
   # comparing each of them with elem
   
while i < len(L):
       if elem == L[i]:
           return True
       
i = i + 1
   
return False

然而上述函数的定义是为了学习使用,Python中已经定义好了相关的关键字来完成此项功能,那就是in关键字。再次类比,string中我们可以用in关键字来判断一个字符串是否被另外一个字符串包含,比如

"hi" in "history"   True
"ei" in "piece"     False

list中也可以用同样的in关键字来实现,如:

45 in [34, 12, 45]   True
"hi" in []           False

如何定义一个函数,来求解某个对象的在list中的索引呢?通过isMember函数的分析,我们不难完成这个函数的定义。但是需要考虑,如果对象不在list中呢?这里我们返回-1表示对象不在list 中,函数定义如下:

# searches for a given element in a given list and
# returns the index of the first occurrence of the
# element, if it is present in the list. Otherwise,
# returns -1.
def search(L, elem):
   i = 0 # i serves as the index into list L
   # Iterate through the elements of the list
   # comparing each of them with elem
   
while i < len(L):
       if elem == L[i]:
           return i
       i = i + 1
   
return -1

Python中list非常有用的两个操作符是+和*。这同样是可以和string类比的,毕竟string可以看做特殊的list嘛。string中+是对两个字符串进行拼接,而list中+是对两个list 进行合并,如:

[10, 20, 30] + [10, 13] 的结果为 [10, 20, 30, 10, 13],

[10, 20, 30] + [“hello”] 的结果为 [10, 20, 30, “hello”]。

在string中,我们知道若s = “cashew”,则2*s (或者 s*2)的结果是 “cashewcashew”。 那么若L = [2, 3, 7],那么 L*2 (或者 2*L) 的结果是 [2, 3, 7, 2, 3, 7]。

学习了这么多,最后给出一个练习题,如何给出两个list,如何进行合并去重并返回合并去重后的list?代码越简洁越好。

Python那些事 小编写的代码如下:

# Takes two lists L1 and L2 and returns the list obtained
# by appending to L1, all elements in L2 that are not in L1
def uniqueExtend(L1, L2):
   index = 0 # serves as index into list L2
   # Loop to walk through elements of L2
   
while index < len(L2):
       # If current element of L2 is not in L1, then append it
       
if not(L2[index] in L1):
           L1 = L1 + [L2[index]]
       index = index + 1
   
return L1

本篇提倡的类比学习的思路你学会了吗?最后的联系题你写的代码是怎么样的呢?是否有更简洁的代码呢?期待你的答案以及与小编的互动哦。

推荐 3
本文由 曹金龙 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册