[Python实战01]创建简单的Python列表
[Python实战01]创建简单的Python列表
一直以来想学习一门脚本语言,但一直没有抽出时间,最近刚好找了一个工作,需要使用到大量的脚本,所以,最近开始学习一下Python,暂时先把Hadoop放一放了。
我们可以使用python来处理一下数据,比如以下的一组数据:
The Holy Grail,1975,Terry Jones & Terry Gilliam,91 mins Graham chapman Michael Palin,John cleese,Terry Gilliam,Eric Idle & Terry Jones The Life of Brain,1979,Terry Jones,94 mins Graham chapman Michael Palin,John cleese,Terry Gilliam,Eric Idle & Terry Jones这组数据可能有点复杂,不过,这组数据存在着某种结构:最前面一行给出了一组电影基本信息,接下来一行是主要演员,再后面第三行则列出了这部电影的配角。
我们该如何将这些信息存储下来呢?
创建简单的Python列表
这里我们可以创建一个简单的Python列表来存放电影的名称,代码如下:movies = ["The Holy Grail","The Life of Brain"]其实这里的列表就像Java或其他编程语言中的数组一样,下表也是从0开始的,如果我们想要调用第一个数据的话,则可以使用movies[0]来进行调用,同样我们可以使用Python的print函数将此数据打印出来。
>>> print(movies[0]) The Holy Grail有了一个简单列表之后我们就先介绍下Python列表的一些基本操作: 可以直接打印列表名来查看列表中的所有内容:
>>> movies = ["The Holy Grail","The Life of Brain"] >>> print(movies) ['The Holy Grail', 'The Life of Brain'] >>>也可以打印出当前列表的长度:
>>> movies = ["The Holy Grail","The Life of Brain"] >>> print(len(movies)) 2 >>>向列表末尾增加一个数据:
>>> movies = ["The Holy Grail","The Life of Brain"] >>> movies.append("Hello") >>> print(movies) ['The Holy Grail', 'The Life of Brain', 'Hello'] >>>从列表末尾删除一个数据:
>>> movies = ["The Holy Grail","The Life of Brain"] >>> movies.pop() 'The Life of Brain' >>> print(movies) ['The Holy Grail'] >>>也可以像列表末尾再增加一个列表:
>>> movies = ["The Holy Grail","The Life of Brain"] >>> movies.extend(["Hello","World"]) >>> print(movies) ['The Holy Grail', 'The Life of Brain', 'Hello', 'World'] >>>在列表中找到并删除某个数据项:
>>> movies = ["The Holy Grail","The Life of Brain"] >>> movies.remove("The Life of Brain") >>> print(movies) ['The Holy Grail'] >>>在某个特定位置的前面增加一个数据项:
>>> movies = ["The Holy Grail","The Life of Brain"] >>> movies.insert(0,"Hello") >>> print(movies) ['Hello', 'The Holy Grail', 'The Life of Brain'] >>>
向列表中增加更多的数据
之前我们已经创建了一个简单的列表,并且把我们想要存储的电影名称保存到了其中,现在我们就可以继续向列表中增加电影的其他信息了,接着要存储的就是电影的年份,我们可以直接这样存储:movies = ["The Holy Grail",1975,"The Life of Brain",1979]好了,为了方便起见,我们这里先介绍一下如何使用输出列表中的内容。像Java语言一样,我们可以通过for循环来输出列表中的内容,但是可能语法格式不太一样,如下:
>>> movies = ["The Holy Grail",1975,"The Life of Brain",1979] >>> for item in movies: print(item) The Holy Grail 1975 The Life of Brain 1979 >>>这里要注意语法格式,在for语句的最后有一个“:”,并且我们可以发现不像Java中for循环后没有一对{},这里通过缩进进行控制,所以接下来的一行print语句一定要进行缩进。 当然我们也可以通过while循环来输出列表中的内容:
>>> movies = ["The Holy Grail",1975,"The Life of Brain",1979] >>> count = 0 >>> while count < len(movies): print(movies[count]) count = count+1 The Holy Grail 1975 The Life of Brain 1979 >>>可以发现这里要通过一个变量count来标识当前访问到了第几个了。
在列表中存储列表
好了,现在我们把剩下的电影信息都存放进来吧:movies = ["The Holy Grail",1975,"Terry Jones & Terry Gilliam",91, ["Graham chapman",["Michael Palin","John cleese","Terry Gilliam","Eric Idle & Terry Jones"]], "The Life of Brain",1979,"Terry Jones",94, ["Graham chapman",["Michael Palin","John cleese","Terry Gilliam","Eric Idle & Terry Jones"]]]这里没有什么悬念的,只是在一个列表中继续嵌套其他的列表,需要认真的看懂这个列表,然后我们就可以通过for把列表输出了,如下:
>>> movies = ["The Holy Grail",1975,"Terry Jones & Terry Gilliam",91, ["Graham chapman",["Michael Palin","John cleese","Terry Gilliam","Eric Idle & Terry Jones"]], "The Life of Brain",1979,"Terry Jones",94, ["Graham chapman",["Michael Palin","John cleese","Terry Gilliam","Eric Idle & Terry Jones"]]] >>> for item in movies: print(item) The Holy Grail 1975 Terry Jones & Terry Gilliam 91 ['Graham chapman', ['Michael Palin', 'John cleese', 'Terry Gilliam', 'Eric Idle & Terry Jones']] The Life of Brain 1979 Terry Jones 94 ['Graham chapman', ['Michael Palin', 'John cleese', 'Terry Gilliam', 'Eric Idle & Terry Jones']] >>>从结果我们可以看出,没有嵌套的内容可以正常输出,但是如果是嵌套列表的话,则是按照列表直接输出的,而没有按照其中的内容一个一个的输出,那有什么方法可以将嵌套的内容也一个一个的输出呢?
在列表中查找列表
我们可以通过一个isinstance()方法来判断当前的内容是哪一个类型的数据,比如当前我们要判断movices是否是一个列表类型,所以我们可以通过isinstance(movices,list)来进行判断,进行判断的同时我们要使用if....else语句,如下:>>> movies = ["The Holy Grail",1975,"Terry Jones & Terry Gilliam",91, ["Graham chapman",["Michael Palin","John cleese","Terry Gilliam","Eric Idle & Terry Jones"]], "The Life of Brain",1979,"Terry Jones",94, ["Graham chapman",["Michael Palin","John cleese","Terry Gilliam","Eric Idle & Terry Jones"]]] >>> if isinstance(movies,list): print("true") else: print("false") true >>>
处理多层嵌套列表
好了,现在我们可以对列表进行嵌套输出了,如下:>>> movies = ["The Holy Grail",1975,"Terry Jones & Terry Gilliam",91, ["Graham chapman",["Michael Palin","John cleese","Terry Gilliam","Eric Idle & Terry Jones"]], "The Life of Brain",1979,"Terry Jones",94, ["Graham chapman",["Michael Palin","John cleese","Terry Gilliam","Eric Idle & Terry Jones"]]] >>> for item_1 in movies: if isinstance(item_1,list): for item_2 in item_1: print(item_2) else: print(item_1) The Holy Grail 1975 Terry Jones & Terry Gilliam 91 Graham chapman ['Michael Palin', 'John cleese', 'Terry Gilliam', 'Eric Idle & Terry Jones'] The Life of Brain 1979 Terry Jones 94 Graham chapman ['Michael Palin', 'John cleese', 'Terry Gilliam', 'Eric Idle & Terry Jones'] >>>从结果我们可以看出我们已经处理了第二层的嵌套,但是第三层的嵌套我们还没有处理,所以我们还需要多嵌套一层输出,如下:
>>> movies = ["The Holy Grail",1975,"Terry Jones & Terry Gilliam",91, ["Graham chapman",["Michael Palin","John cleese","Terry Gilliam","Eric Idle & Terry Jones"]], "The Life of Brain",1979,"Terry Jones",94, ["Graham chapman",["Michael Palin","John cleese","Terry Gilliam","Eric Idle & Terry Jones"]]] >>> for item_1 in movies: if isinstance(item_1,list): for item_2 in item_1: if isinstance(item_2,list): for item_3 in item_2: print(item_3) else: print(item_2) else: print(item_1) The Holy Grail 1975 Terry Jones & Terry Gilliam 91 Graham chapman Michael Palin John cleese Terry Gilliam Eric Idle & Terry Jones The Life of Brain 1979 Terry Jones 94 Graham chapman Michael Palin John cleese Terry Gilliam Eric Idle & Terry Jones >>>这样我们就可以把嵌套中的内容全部输出了,但是这样输出相对麻烦,我们可以定义一个函数来解决此问题:
>>> movies = ["The Holy Grail",1975,"Terry Jones & Terry Gilliam",91, ["Graham chapman",["Michael Palin","John cleese","Terry Gilliam","Eric Idle & Terry Jones"]], "The Life of Brain",1979,"Terry Jones",94, ["Graham chapman",["Michael Palin","John cleese","Terry Gilliam","Eric Idle & Terry Jones"]]] >>> def print_lol(movies): for item_1 in movies: if isinstance(item_1,list): for item_2 in item_1: if isinstance(item_2,list): for item_3 in item_2: print(item_3) else: print(item_2) else: print(item_1) >>> print_lol(movies) The Holy Grail 1975 Terry Jones & Terry Gilliam 91 Graham chapman Michael Palin John cleese Terry Gilliam Eric Idle & Terry Jones The Life of Brain 1979 Terry Jones 94 Graham chapman Michael Palin John cleese Terry Gilliam Eric Idle & Terry Jones >>>但是此时的函数并不能适应所有的列表,我们可以使用递归进行改进此函数:
>>> movies = ["The Holy Grail",1975,"Terry Jones & Terry Gilliam",91, ["Graham chapman",["Michael Palin","John cleese","Terry Gilliam","Eric Idle & Terry Jones"]], "The Life of Brain",1979,"Terry Jones",94, ["Graham chapman",["Michael Palin","John cleese","Terry Gilliam","Eric Idle & Terry Jones"]]] >>> def print_lol(movies): for item_1 in movies: if isinstance(item_1,list): print_lol(item_1) else: print(item_1) >>> print_lol(movies) The Holy Grail 1975 Terry Jones & Terry Gilliam 91 Graham chapman Michael Palin John cleese Terry Gilliam Eric Idle & Terry Jones The Life of Brain 1979 Terry Jones 94 Graham chapman Michael Palin John cleese Terry Gilliam Eric Idle & Terry Jones >>>这样python中所有的列表打印都可以使用此函数了。
评论关闭