跳转到内容

环/课程/列表

来自维基教科书,开放世界中的开放书籍
<

在本节中,我们将学习如何处理列表。

创建列表

[编辑 | 编辑源代码]

我们可以通过在方括号内定义列表项目来创建新的列表。

示例

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

我们也可以使用 : 运算符创建新的列表


示例

	aList = 1:5
	aList2 = "a":"z"

我们也可以使用 list() 函数创建列表

语法

	list = list(size)

示例

	aList = list(10)	# aList contains 10 items

.. 注意:列表索引从 1 开始

添加项目

[编辑 | 编辑源代码]

要向列表添加新项目,我们可以使用 Add() 函数。

语法

	Add(List,Item)


示例

	aList = ["one","two"]
	add(aList,"three")

我们也可以使用 + 运算符来实现。

语法

	List + item

示例

	aList = 1:10	# create list contains numbers from 1 to 10
	aList + 11	# add number 11 to the list
	see aList	# print the list

获取列表大小

[编辑 | 编辑源代码]

我们可以使用 len() 函数获取列表大小

语法

	Len(List)

示例

	aList = 1:20  see len(aList)  # print 20

从列表中删除项目

[编辑 | 编辑源代码]

要从列表中删除项目,我们可以使用 del() 函数

语法

	del(list,index)

示例

	aList = ["one","two","other","three"]
	Del(aList,3)	# delete item number three
	see aList   	# print one two three

获取列表项目

[编辑 | 编辑源代码]

要从列表中获取项目,我们使用以下语法

	List[Index]

示例

	aList = ["Cairo","Riyadh"]
	see "Egypt : " + aList[1] + nl +
	    "KSA   : " + aList[2] + nl

设置列表项目

[编辑 | 编辑源代码]

要设置列表中项目的 value,我们可以使用以下语法

	List[Index] = Expression

示例

	aList = list(3)	# create list contains three items
	aList[1] = "one" aList[2] = "two" aList[3] = "three"
	see aList

要查找列表中的项目,我们可以使用 find() 函数

语法

	Find(List,ItemValue) ---> Item Index
	Find(List,ItemValue,nColumn) ---> Search in nColumn, returns the Item Index

示例

	aList = ["one","two","three","four","five"]
	see find(aList,"three")		# print 3

示例

	mylist = [["one",1],
		  ["two",2],
		  ["three",3]]

	see find(mylist,"two",1) + nl		# print 2
	see find(mylist,2,2) + nl		# print 2

我们也可以使用 binarysearch() 函数在排序后的列表中进行搜索。

语法

	BinarySearch(List,ItemValue) ---> Item Index
	BinarySearch(List,ItemValue,nColumn) ---> Search in nColumn, returns the Item Index

示例

	aList = ["one","two","three","four","five"]
	aList = sort(aList)
	see binarysearch(aList,"three")

输出

	five
	four
	one
	three
	two
	4

我们可以使用 sort() 函数对列表进行排序。

语法

	Sort(List) ---> Sorted List
	Sort(List,nColumn) ---> Sorted List based on nColumn

示例

	aList = [10,12,3,5,31,15]
	aList = sort(aList) see aList # print 3 5 10 12 15 31

我们可以对字符串列表进行排序

示例

	mylist = ["mahmoud","samir","ahmed","ibrahim","mohammed"]
	see mylist	   	  # print list before sorting
	mylist = sort(mylist)	  # sort list
	see "list after sort"+nl
	see mylist		  # print ahmed ibrahim mahmoud mohammed samir

我们可以根据特定列对列表进行排序。

示例

	aList = [ ["mahmoud",15000] ,
		  ["ahmed", 14000 ] ,
		  ["samir", 16000 ] ,
		  ["mohammed", 12000 ] ,
	 	  ["ibrahim",11000 ] ]

	aList2 = sort(aList,1)
	see aList2

输出

	ahmed
	14000
	ibrahim
	11000
	mahmoud
	15000
	mohammed
	12000
	samir
	16000

我们可以使用 reverse() 函数反转列表。

语法

	Reverse(List) ---> Reversed List

示例

	aList = [10,20,30,40,50]
	aList = reverse(aList)
	see aList 	# print 50 40 30 20 10

插入项目

[编辑 | 编辑源代码]

要将项目插入列表中,我们可以使用 insert() 函数。

语法

	Insert(List,Index,Item)

插入的项目将位于索引之后

示例

	aList = [1,2,4,5]
	insert(aList,2,3)
	see aList	  # print 1 2 3 4 5

嵌套列表

[编辑 | 编辑源代码]

列表可能包含其他列表

示例

	aList = [ 1 , [10,20,30] , 5 , [100,1000,5000] ]
	aList2 = [
	"one","two", 
	[3,4],
	[20,30], ["three",
		  "four",
		  "five",[100,200,300]
                 ]
	]
	
	see aList[2] 	 	# print 10 20 30
	see aList[4][3] + nl 	# print 5000
	see aList2[5][2] + nl 	# print four
	see aList2[5][4][3]	# print 300

复制列表

[编辑 | 编辑源代码]

我们可以使用赋值运算符复制列表(包括嵌套列表)。

示例

	aList = [
	"one","two", 
	[3,4],
	[20,30], ["three",
		  "four",
		  "five",[100,200,300]
                 ]
	]

	aList2 = aList		# Copy aList to aList2
	aList2[5] = "other"	# modify item number five
	see aList2[5] + nl	# print other
	see aList[5]		# print three four five 100 200 300

一等公民列表

[编辑 | 编辑源代码]

列表是 `一等公民 <http://en.wikipedia.org/wiki/First-class_citizen>`_,我们可以将列表存储在变量中,将列表传递给函数,以及从函数中返回列表。

示例

	aList = duplicate( [1,2,3,4,5] )
	see aList[10] + nl		  # print 5

	see mylist()			  # print 10 20 30 40 50
	
	func duplicate list
		nMax = len(list)
		for x = 1 to nMax
			list + list[x]
		next
		return list

	func mylist return [10,20,30,40,50]

在定义期间使用列表

[编辑 | 编辑源代码]

我们可以在第一次定义列表时使用列表项目。

示例

	aList = [ [1,2,3,4,5] , aList[1] , aList[1] ]
	see aList	# print 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5


将列表传递给函数

[编辑 | 编辑源代码]

列表是通过引用传递给函数的。这意味着被调用函数将在同一个列表上工作,并且可以修改它。

示例

	func main
		aList = [1,2,3,4,5]	# create list, local in function main
		myfunc(aList)		# call function, pass list by reference
		see aList		# print 1 2 3 4 5 6 7 8 9 10

	func myfunc list
		list + [6,7,8,9,10]

通过字符串索引访问列表项目

[编辑 | 编辑源代码]

在获取项目 value 或设置项目 value 时,我们可以使用字符串索引访问项目,而不是使用数字来确定项目索引,如果项目是一个包含两个项目的列表,并且第一个项目是字符串。

示例

	aList = [ ["one",1] , ["two",2] , ["three",3] ]
	see aList["one"] + nl +
	    aList["two"] + nl +
	    aList["three"] 	# print 1 2 3

这种类型的列表可以使用 : 和 = 运算符以更简洁的语法定义。

示例

	aList = [ :one = 1 , :two = 2 , :three = 3 ]
	see aList["one"] + nl +
	    aList["two"] + nl +
	    aList["three"] + nl	# print 1 2 3
	see aList[1]		# print one 1

.. 提示:在标识符(一个词)之前使用 : 表示字面量

.. 注意:在列表定义中使用 = 会创建一个包含两个项目的列表,其中第一个项目是左侧,第二个项目是右侧。

我们可以使用字符串索引向列表添加新项目

示例

	aList = []
	aList["Egypt"] = "Cairo"
	aList["KSA"] = "Riyadh"
	see aList["Egypt"] + nl + 	# print Cairo
	    aList["KSA"] + nl		# print Riyadh

使用列表传递参数

[编辑 | 编辑源代码]

这种类型的列表非常适合将参数传递给函数,因为参数的顺序并不重要(我们可以更改顺序)。

此外,一些参数可能是可选的。

示例

	myconnect (  [ :server = "myserver.com" , :port = 80 , 
                       :username = "mahmoud" , :password = "password" ] ) 

	func myconnect mypara
	
		# print connection details
		see "User Name : " + mypara[:username] + nl +
		    "Password  : " + mypara[:password] + nl +
                    "Server    : " + mypara[:server] + nl +
                    "Port      : " + mypara[:port]
华夏公益教科书