[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中所有的列表打印都可以使用此函数了。







 

评论关闭