# Python 列表
> 原文: [http://zetcode.com/lang/python/lists/](http://zetcode.com/lang/python/lists/)
在 Python 編程教程的這一部分中,我們將更詳細地介紹 Python 列表。
## Python 列表定義
列表是值的有序集合。 它可以包含各種類型的值。 列表是可變容器。 這意味著我們可以添加值,刪除值或修改現有值。
Python 列表表示有限序列的數學概念。 列表的值稱為列表的項目或元素。 列表可以多次包含相同的值。 每次出現都被視為不同的項目。
## Python 列表索引
列表元素可以通過其索引進行訪問。 第一個元素的索引為 0,最后一個元素的索引為 -1。
`simple.py`
```py
#!/usr/bin/env python
# simple.py
nums = [1, 2, 3, 4, 5]
print(nums)
```
這是一個包含五個元素的簡單列表。 該列表由方括號`[]`分隔。 列表的元素由逗號分隔。 列表的內容將打印到控制臺。
```py
$ ./simple.py
[1, 2, 3, 4, 5]
```
這是示例的輸出。
列表可以包含各種數據類型的元素。
`various_types.py`
```py
#!/usr/bin/env python
# various_types.py
class Being:
pass
objects = [1, -2, 3.4, None, False, [1, 2], "Python", (2, 3), Being(), {}]
print(objects)
```
在示例中,我們創建一個對象列表。 它包含數字,布爾值,另一個列表,字符串,元組,自定義對象和字典。
```py
$ ./various_types.py
[1, -2, 3.4, None, False, [1, 2], 'Python', (2, 3),
<__main__.Being instance at 0x7f653577f6c8>, {}]
```
這是輸出。
## Python 列表初始化
有時我們需要預先初始化一個列表以具有特定數量的元素。
`initialization.py`
```py
#!/usr/bin/env python
n1 = [0 for i in range(15)]
n2 = [0] * 15
print(n1)
print(n2)
n1[0:11] = [10] * 10
print(n1)
```
在此示例中,我們使用列表推導和*運算符初始化了兩個列表。
```py
n1 = [0 for i in range(15)]
n2 = [0] * 15
```
這兩個列表被初始化為十五個零。
```py
n1[0:11] = [10] * 10
```
前十個值將替換為 10s。
```py
$ ./initialization.py
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0]
```
這是示例輸出。
## Python 列表函數
`list()`函數從可迭代對象創建列表。 可迭代的對象可以是序列,支持迭代的容器或迭代器對象。 如果未指定任何參數,則創建一個新的空列表。
`list_fun.py`
```py
#!/usr/bin/env python
# list_fun.py
a = []
b = list()
print(a == b)
print(list((1, 2, 3)))
print(list("ZetCode"))
print(list(['Ruby', 'Python', 'Perl']))
```
在示例中,我們創建一個空列表,一個元組列表,一個字符串和另一個列表。
```py
a = []
b = list()
```
這是創建空列表的兩種方法。
```py
print(a == b)
```
該行打印`True`。 這證實了`a`和`b`相等。
```py
print(list((1, 2, 3)))
```
我們從 Python 元組創建一個列表。
```py
print(list("ZetCode"))
```
該行從字符串生成列表。
```py
print(list(['Ruby', 'Python', 'Perl']))
```
最后,我們創建一個字符串列表的副本。
```py
$ ./list_fun.py
True
[1, 2, 3]
['Z', 'e', 't', 'C', 'o', 'd', 'e']
['Ruby', 'Python', 'Perl']
```
這是示例輸出。
## Python 列表操作
以下代碼顯示了一些基本的列表操作。
`list_oper.py`
```py
#!/usr/bin/env python
# list_oper.py
n1 = [1, 2, 3, 4, 5]
n2 = [3, 4, 5, 6, 7]
print(n1 == n2)
print(n1 + n2)
print(n1 * 3)
print(2 in n1)
print(2 in n2)
```
我們定義了兩個整數列表。 我們在這些列表上使用一些運算符。
```py
print(n1 == n2)
```
列表的內容與`==`運算符進行比較。 由于元素不同,該行打印`False`。
```py
print(n1 + n2)
```
添加`n1`和`n2`列表以形成新列表。 新列表包含兩個列表的所有元素。
```py
print(n1 * 3)
```
我們在列表上使用乘法運算符。 它重復元素 n 次; 在我們的情況下是三遍。
```py
print(2 in n1)
```
我們使用`in`運算符來找出列表中是否存在該值。 它返回布爾值`True`或`False`。
```py
$ ./lists.py
False
[1, 2, 3, 4, 5, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
True
False
```
運行示例將給出此輸出。
## Python 序列函數
序列函數可用于任何序列類型,包括列表。
`sequence_funs.py`
```py
#!/usr/bin/env python
# sequence_funs.py
n = [1, 2, 3, 4, 5, 6, 7, 8]
print("There are {0} items".format(len(n)))
print("Maximum is {0}".format(max(n)))
print("Minimum is {0}".format(min(n)))
print("The sum of values is {0}".format(sum(n)))
```
在上面的示例中,我們具有四個函數:`len()`,`max()`,`min()`和`sum()`。
```py
print("There are {0} items".format(len(n)))
```
`len()`函數返回列表的大小。 列表中元素的數量。
```py
print("Maximum is {0}".format(max(n)))
print("Minimum is {0}".format(min(n)))
```
`max()`和`min()`函數返回列表的最大值和最小值。
```py
print("The sum of values is {0}".format(sum(n)))
```
`sum()`函數計算`n`列表中數字的總和。
```py
$ ./sequence_funs.py
There are 8 items
Maximum is 8
Minimum is 1
The sum of values is 36
```
這是輸出。
## Python 添加列表元素
本節將顯示如何將元素添加到 Python 列表中。
`adding.py`
```py
#!/usr/bin/env python
# adding.py
langs = []
langs.append("Python")
langs.append("Perl")
print(langs)
langs.insert(0, "PHP")
langs.insert(2, "Lua")
print(langs)
langs.extend(("JavaScript", "ActionScript"))
print(langs)
```
我們可以通過三種方法將新元素添加到列表中:`append()`,`insert()`和`extend()`。
```py
langs = []
```
創建一個空列表。
```py
langs.append("Python")
langs.append("Perl")
```
`append()`方法將一個項目添加到列表的末尾; 我們附加兩個字符串。
```py
langs.insert(0, "PHP")
langs.insert(2, "Lua")
```
`insert()`方法將元素放置在索引號指示的特定位置。 `"PHP"`字符串插入第一個位置,`"Lua"`字符串插入第三個位置。 請注意,列表索引號從零開始。
```py
langs.extend(("JavaScript", "ActionScript"))
```
`extend()`方法將值的序列添加到列表的末尾。 在我們的例子中,兩個 Python 元組字符串附加在列表的末尾。
```py
$ ./adding.py
['Python', 'Perl']
['PHP', 'Python', 'Lua', 'Perl']
['PHP', 'Python', 'Lua', 'Perl', 'JavaScript', 'ActionScript']
```
這是示例輸出。
## IndexError
列表下標超出范圍時,將引發`IndexError`。
`index_error.py`
```py
#!/usr/bin/env python
# index_error.py
n = [1, 2, 3, 4, 5]
try:
n[0] = 10
n[6] = 60
except IndexError as e:
print(e)
```
在腳本中,我們定義了一個包含五個整數的列表。 這些元素的索引分別為 0、1、2、3 和 4。使用較大的索引會導致錯誤。
```py
n[6] = 60
```
索引 6 超出了我們的列表范圍。 拋出`IndexError`。
```py
except IndexError as e:
print(e)
```
我們使用`except`子句捕獲錯誤。 在子句的正文中,我們顯示錯誤消息。
```py
$ ./index_error.py
list assignment index out of range
```
這是示例輸出。
## TypeError
如果元組的索引不是純整數,則會拋出`TypeError`。
`type_error.py`
```py
#!/usr/bin/env python
# type_error.py
n = [1, 2, 3, 4, 5]
try:
print(n[1])
print(n['2'])
except TypeError as e:
print("Error in file {0}".format( __file__))
print("Message: {0}".format(e))
```
本示例拋出一個`TypeError`。
```py
print(n['2'])
```
列表索引必須是整數。 其他類型以錯誤結尾。
```py
except TypeError as e:
print("Error in file {0}".format( __file__))
print("Message: {0}".format(e))
```
在`except`塊中,我們打印發生異常的文件名和消息字符串。
```py
$ ./typeerror.py
2
Error in file ./typeerror.py
Message: list indices must be integers, not str
```
這是示例輸出。
## 從 Python 列表中刪除元素
以前,我們已將項目添加到列表中。 現在,我們將從列表中刪除它們。
`removing.py`
```py
#!/usr/bin/env python
# removing.py
langs = ["Python", "Ruby", "Perl", "Lua", "JavaScript"]
print(langs)
lang = langs.pop(3)
print("{0} was removed".format(lang))
lang = langs.pop()
print("{0} was removed".format(lang))
print(langs)
langs.remove("Ruby")
print(langs)
```
`pop()`方法刪除并返回具有指定索引的元素,如果沒有給出索引號,則返回最后一個元素。 `remove()`方法從列表中刪除特定項目。
```py
lang = langs.pop(3)
print("{0} was removed".format(lang))
```
我們刪除具有索引 3 的元素。`pop()`方法返回已刪除元素的名稱; 它被打印到控制臺。
```py
lang = langs.pop()
print("{0} was removed".format(lang))
```
列表中的最后一個元素,即`"JavaScript"`字符串,從列表中刪除。
```py
langs.remove("Ruby")
```
此行從`langs`列表中刪除`"Ruby"`字符串。
```py
['Python', 'Ruby', 'Perl', 'Lua', 'JavaScript']
Lua was removed
JavaScript was removed
['Python', 'Ruby', 'Perl']
['Python', 'Perl']
```
從腳本的輸出中,我們可以看到所描述方法的效果。
`del`關鍵字也可用于刪除列表元素。
`removing2.py`
```py
#!/usr/bin/env python
# removing2.py
langs = ["Python", "Ruby", "Perl", "Lua", "JavaScript"]
print(langs)
del langs[1]
print(langs)
#del langs[15]
del langs[:]
print(langs)
```
我們有一個字符串列表。 我們使用`del`關鍵字刪除列表元素。
```py
del langs[1]
```
我們從列表中刪除第二個字符串。 它是`"Ruby"`字符串。
```py
#del langs[15]
```
我們只能刪除現有元素。 如果取消注釋代碼行,我們將收到`IndexError`消息。
```py
del langs[:]
```
在這里,我們從列表中刪除所有剩余的元素。 `[:]`字符表示列表的所有項目。
```py
$ ./removing2.py
['Python', 'Ruby', 'Perl', 'Lua', 'JavaScript']
['Python', 'Perl', 'Lua', 'JavaScript']
[]
```
這是示例輸出。
## Python 修改列表元素
在下一個示例中,我們將修改列表元素。
`modifying.py`
```py
#!/usr/bin/env python
# modifying.py
langs = ["Python", "Ruby", "Perl"]
langs.pop(2)
langs.insert(2, "PHP")
print(langs)
langs[2] = "Perl"
print(langs)
```
在示例中,我們兩次修改了`langs`列表的第三個元素。
```py
langs.pop(2)
langs.insert(2, "PHP")
```
修改元素的一種方法是將其刪除,然后將另一個元素放置在同一位置。
```py
langs[2] = "Perl"
```
另一種方法更簡單。 我們在給定位置分配一個新元素。 現在,在第三個位置再次有`"Perl"`字符串。
```py
$ ./modifying.py
['Python', 'Ruby', 'PHP']
['Python', 'Ruby', 'Perl']
```
這是示例輸出。
## Python 復制列表
我們可以通過多種方式在 Python 中復制列表。 我們將提及其中的一些。
`copying.py`
```py
#!/usr/bin/env python
# copying.py
import copy
w = ["Python", "Ruby", "Perl"]
c1 = w[:]
c2 = list(w)
c3 = copy.copy(w)
c4 = copy.deepcopy(w)
c5 = [e for e in w]
c6 = []
for e in w:
c6.append(e)
c7 = []
c7.extend(w)
print(c1, c2, c3, c4, c5, c6, c7)
```
我們列出了三個字符串。 我們將列表復制了七次。
```py
import copy
```
我們導入`copy`模塊,其中有兩種復制方法。
```py
c1 = w[:]
```
使用切片語法復制列表。
```py
c2 = list(w)
```
當`list()`函數將列表作為參數時,它會創建一個列表副本。
```py
c3 = copy.copy(w)
c4 = copy.deepcopy(w)
```
`copy()`方法產生列表的淺表副本。 `deepcopy()`產生列表的深層副本。
```py
c5 = [e for e in w]
```
使用列表推導創建字符串的副本。
```py
c6 = []
for e in w:
c6.append(e)
```
由`for`循環創建的副本。
```py
c7 = []
c7.extend(w)
```
`extend()`方法也可用于創建副本。
```py
$ ./copying.py
['Python', 'Ruby', 'Perl'] ['Python', 'Ruby', 'Perl'] ['Python', 'Ruby', 'Perl']
['Python', 'Ruby', 'Perl'] ['Python', 'Ruby', 'Perl'] ['Python', 'Ruby', 'Perl']
['Python', 'Ruby', 'Perl']
```
使用不同的技術創建了一個字符串列表的七個副本。
## Python 索引列表元素
Python 列表中的元素可以通過其索引進行訪問。 索引號是整數; 他們從零開始。 索引可以是負數; 負索引是指列表末尾的元素。 列表中的第一項具有索引 0,最后一項具有-1。
`indexing.py`
```py
#!/usr/bin/env python
# indexing.py
n = [1, 2, 3, 4, 5, 6, 7, 8]
print(n[0])
print(n[-1])
print(n[-2])
print(n[3])
print(n[5])
```
我們可以通過其索引訪問列表的元素。 索引位于列表名稱后方括號`[]`之間。
```py
print(n[0])
print(n[-1])
print(n[-2])
```
這三行將打印列表的第一,最后和最后一個項目。
```py
print(n[3])
print(n[5])
```
兩行顯示列表的第四和第六個元素。
```py
$ ./indexing.py
1
8
7
4
6
```
這是示例輸出。
`index(e, start, end)`方法查找特定元素并返回其最低索引。 `start`和`end`是可選參數,它們將搜索限制到給定的邊界。
`indexing2.py`
```py
#!/usr/bin/env python
# indexing2.py
n = [1, 2, 3, 4, 1, 2, 3, 1, 2]
print(n.index(1))
print(n.index(2))
print(n.index(1, 1))
print(n.index(2, 2))
print(n.index(1, 2, 5))
print(n.index(3, 4, 8))
```
`index()`方法的代碼示例。
```py
print(n.index(1))
print(n.index(2))
```
這兩行顯示 n 列表中最左邊的 1、2 值的索引。
```py
print(n.index(1, 1))
print(n.index(2, 2))
```
在這里,我們在指定索引之后搜索值 1 和 2。
```py
print(n.index(1, 2, 5))
```
在這里,我們在索引為 2 和 5 的值之間搜索值 1。
```py
$ ./indexing2.py
0
1
4
5
4
6
```
這是示例輸出。
## Python 切片列表
列表切片是一種從列表中提取某些元素并將其形成另一個列表的操作。 可能具有不同數量的索引和不同的索引范圍。
列表切片的語法如下:
```py
[start:end:step]
```
語法的開始,結束,步驟部分是整數。 它們每個都是可選的。 它們可以是正面的也可以是負面的。 具有結束索引的值不包括在切片中。
`slice.py`
```py
#!/usr/bin/env python
# slice.py
n = [1, 2, 3, 4, 5, 6, 7, 8]
print(n[1:5])
print(n[:5])
print(n[1:])
print(n[:])
```
我們從八個整數的列表中創建四個切片。
```py
print(n[1:5])
```
第一個切片的索引值為 1、2、3 和 4。新形成的列表為`[2, 3, 4, 5]`。
```py
print(n[:5])
```
如果省略起始索引,則假定默認值為 0。切片為`[1, 2, 3, 4, 5]`。
```py
print(n[1:])
```
如果省略了結束索引,則采用-1 默認值。 在這種情況下,切片將所有值帶到列表的末尾。
```py
print(n[:])
```
甚至兩個索引都可以忽略。 此語法創建列表的副本。
```py
$ ./slice.py
[2, 3, 4, 5]
[1, 2, 3, 4, 5]
[2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
```
示例的輸出。
切片語法中的第三個索引是步驟。 它允許我們從列表中獲取第 n 個值。
`slice2.py`
```py
#!/usr/bin/env python
# slice2.py
n = [1, 2, 3, 4, 5, 6, 7, 8]
print(n[1:9:2])
print(n[::2])
print(n[::1])
print(n[1::3])
```
我們使用`step`值形成四個新列表。
```py
print(n[1:9:2])
```
在這里,我們創建一個切片,該切片具有從 n 列表開始的每個第二元素,從第二個元素開始,以第八個元素結束。 新列表具有以下元素:`[2, 4, 6, 8]`。
```py
print(n[::2])
```
在這里,我們通過獲取列表開頭到結尾的每個第二個值來構建切片。
```py
print(n[::1])
```
這將創建一個列表的副本。
```py
print(n[1::3])
```
切片具有第二個元素,從第二個元素到列表的末尾。
```py
$ ./slice2.py
[2, 4, 6, 8]
[1, 3, 5, 7]
[1, 2, 3, 4, 5, 6, 7, 8]
[2, 5, 8]
```
示例的輸出。
索引可以是負數。 負索引是指列表末尾的值。 最后一個元素的索引為-1,最后一個元素的索引為-2,依此類推。負數較小的索引必須在語法中排在首位。 這意味著我們寫`[-6, -2]`而不是`[-2, -6]`。 后者返回一個空列表。
`slice3.py`
```py
#!/usr/bin/env python
# slice3.py
n = [1, 2, 3, 4, 5, 6, 7, 8]
print(n[-4:-1])
print(n[-1:-4])
print(n[-5:])
print(n[-6:-2:2])
print(n[::-1])
```
在此腳本中,我們形成五個列表。 我們還使用負索引號。
```py
print(n[-4:-1])
print(n[-1:-4])
```
第一行返回`[5, 6, 7]`,第二行返回一個空列表。 較低的索引必須先于較高的索引。
```py
print(n[::-1])
```
這將創建一個反向列表。
```py
$ ./slice3.py
[5, 6, 7]
[]
[4, 5, 6, 7, 8]
[3, 5]
[8, 7, 6, 5, 4, 3, 2, 1]
```
示例的輸出。
上面提到的語法可以在分配中使用。 賦值的右側必須有一個可迭代的對象。
`slice4.py`
```py
#!/usr/bin/env python
# slice4.py
n = [1, 2, 3, 4, 5, 6, 7, 8]
n[0] = 10
n[1:3] = 20, 30
n[3::1] = 40, 50, 60, 70, 80
print(n)
```
我們有八個整數的列表。 我們使用切片語法將元素替換為新值。
## 遍歷 Python 列表
本節將指出在 Python 中遍歷列表的三種基本方法。
`traverse.py`
```py
#!/usr/bin/env python
# traverse.py
n = [1, 2, 3, 4, 5]
for e in n:
print(e, end=" ")
print()
```
第一個是遍歷列表的最直接方法。
```py
n = [1, 2, 3, 4, 5]
```
我們有一個數字列表。 列表中有五個整數。
```py
for e in n:
print(e, end=" ")
```
使用`for`循環,我們一張一張地瀏覽列表,然后將當前元素打印到控制臺。
```py
$ ./traverse.py
1 2 3 4 5
```
這是腳本的輸出。 整數將打印到終端。
第二個示例更為詳細。
`traverse2.py`
```py
#!/usr/bin/env python
# traverse2.py
n = [1, 2, 3, 4, 5]
i = 0
s = len(n)
while i < s:
print(n[i], end=" ")
i = i + 1
print()
```
我們正在使用`while`循環遍歷列表。
```py
i = 0
l = len(n)
```
首先,我們需要定義一個計數器并找出列表的大小。
```py
while i < s:
print(n[i], end=" ")
i = i + 1
```
在這兩個數字的幫助下,我們遍歷列表并將每個元素打印到終端。
`enumerate()`內置函數為我們提供了循環中列表的索引和值。
`traverse3.py`
```py
#!/usr/bin/env python
# traverse3.py
n = [1, 2, 3, 4, 5]
print(list(enumerate(n)))
for e, i in enumerate(n):
print("n[{0}] = {1}".format(e, i))
```
在示例中,我們打印值和值的索引。
```py
$ ./traverse3.py
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]
n[0] = 1
n[1] = 2
n[2] = 3
n[3] = 4
n[4] = 5
```
運行腳本。
## Python 計數列表元素
有時對列表元素進行計數很重要。 為此,Python 具有`count()`方法。
`counting.py`
```py
#!/usr/bin/env python
# counting.py
n = [1, 1, 2, 3, 4, 4, 4, 5]
print(n.count(4))
print(n.count(1))
print(n.count(2))
print(n.count(6))
```
在此示例中,我們計算`n`列表中幾個數字的出現次數。
```py
n = [1, 1, 2, 3, 4, 4, 4, 5]
```
我們有一個整數列表。 整數 1 和 4 多次出現。
```py
print(n.count(4))
print(n.count(1))
print(n.count(2))
print(n.count(6))
```
使用`count()`方法,我們發現 4、1、2 和 6 個數字的出現。
```py
$ ./counting.py
3
2
1
0
```
數字 4 出現 3 次,1 次兩次,2 次一次以及 6 在列表中不存在。
## Python 嵌套列表
可以將列表嵌套到另一個列表中。 使用嵌套列表,將創建一個新維度。 要訪問嵌套列表,需要附加的方括號`[]`。
`nested.py`
```py
#!/usr/bin/env python
# nested.py
nums = [[1, 2], [3, 4], [5, 6]]
print(nums[0])
print(nums[1])
print(nums[2])
print(nums[0][0])
print(nums[0][1])
print(nums[1][0])
print(nums[2][1])
print(len(nums))
```
在示例中,我們有三個嵌套列表,每個嵌套列表包含兩個元素。
```py
print(nums[0])
print(nums[1])
print(nums[2])
```
nums 列表的三個嵌套列表將打印到控制臺。
```py
print(nums[0][0])
print(nums[0][1])
```
在這里,我們打印第一個嵌套列表的兩個元素。 `nums[0]`引用第一個嵌套列表; `nums[0][0]`引用第一個嵌套列表的第一個元素,即 1。
```py
print(len(nums))
```
該行顯示 3。每個嵌套列表都計為一個元素。 不考慮其內部元素。
```py
$ ./nested.py
[1, 2]
[3, 4]
[5, 6]
1
2
3
6
3
```
這是示例輸出。
第二個示例具有其他維度。
`nested2.py`
```py
#!/usr/bin/env python
# nested2.py
nums = [[1, 2, [3, 4, [5, 6]]]]
print(nums[0])
print(nums[0][2])
print(nums[0][2][2])
print(nums[0][0])
print(nums[0][2][1])
print(nums[0][2][2][0])
```
在示例中,`[5, 6]`列表嵌套到`[3, 4, ...]`列表中,`[3, 4, [4, 6]]`嵌套到`[1, 2, ...]`列表中, 最終是`nums`列表的元素。
```py
print(nums[0])
print(nums[0][2])
print(nums[0][2][2])
```
這三行將嵌套列表打印到控制臺。
```py
print(nums[0][0])
print(nums[0][2][1])
print(nums[0][2][2][0])
```
在此訪問三個元素。 引用內部列表時,需要其他方括號`[]`。
```py
$ ./nested2.py
[1, 2, [3, 4, [5, 6]]]
[3, 4, [5, 6]]
[5, 6]
1
4
5
```
這是示例輸出。
## Python 排序列表
在本節中,我們對列表元素進行排序。 Python 具有用于執行排序的內置列表方法`sort()`和`sorted()`函數。
`sorting.py`
```py
#!/usr/bin/env python
# sorting.py
n = [3, 4, 7, 1, 2, 8, 9, 5, 6]
print(n)
n.sort()
print(n)
n.sort(reverse=True)
print(n)
```
在代碼示例中,我們有一個未排序整數的列表。 我們使用`sort()`方法對元素進行排序。 該方法對元素進行原位排序; 原始列表已修改。
```py
n.sort()
```
`sort()`方法以升序對元素進行排序。
```py
n.sort(reverse=True)
```
將反向參數設置為`True`時,列表以降序排序。
```py
$ ./sorting.py
[3, 4, 7, 1, 2, 8, 9, 5, 6]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
```
在輸出中,我們可以看到原始列表,即按升序和降序排序的列表。
如果我們不想更改原始列表,可以使用`sorted`函數。 此函數創建一個新的排序列表。
`sorting2.py`
```py
#!/usr/bin/env python
# sorting2.py
n = [3, 4, 1, 7, 2, 5, 8, 6]
print(n)
print(sorted(n))
print(n)
```
在示例中,我們使用`sorted()`函數對列表的元素進行排序。
```py
$ ./sorting2.py
[3, 4, 1, 7, 2, 5, 8, 6]
[1, 2, 3, 4, 5, 6, 7, 8]
[3, 4, 1, 7, 2, 5, 8, 6]
```
從腳本的輸出中,我們可以看到原始列表沒有被修改。
`sort()`方法具有可選的`key`參數。 該參數指定在進行比較之前在每個列表元素上要調用的函數。
`sorting3.py`
```py
#!/usr/bin/env python
# sorting3.py
words = ["big", "Blue", "seven", "glass",
"Green", "after", "Anctartica"]
words.sort()
print(words)
words.sort(key=str.lower)
print(words)
```
該示例產生區分大小寫和不區分大小寫的字符串比較。
```py
words.sort(key=str.lower)
```
為了創建不區分大小寫的比較,我們將`str.lower`函數添加到`key`參數中。
```py
$ ./sorting3.py
['Anctartica', 'Blue', 'Green', 'after', 'big', 'glass', 'seven']
['after', 'Anctartica', 'big', 'Blue', 'glass', 'Green', 'seven']
```
這是示例輸出。
如果要對 Unicode 字符串進行排序,我們需要做其他工作。
`sorting_locale.py`
```py
#!/usr/bin/env python
import locale
from functools import cmp_to_key
w = [u'zem', u'?tebot', u'rum', u'?elezo', u'prameň', u"sob"]
locale.setlocale(locale.LC_COLLATE, ('sk_SK', 'UTF8'))
w.sort(key=cmp_to_key(locale.strcoll))
for e in w:
print(e)
```
我們有六個 unicode 字符串的列表。 我們更改語言環境設置,以根據當前語言選項對字符串進行排序。
```py
import locale
from functools import cmp_to_key
```
我們導入`locale`模塊和`cmp_to_key`轉換函數。
```py
w = [u'zem', u'?tebot', u'rum', u'?elezo', u'prameň', u"sob"]
```
這是六個字符串的列表。 字符串使用斯洛伐克語,并帶有一些變音標記。 它們在正確排序字符方面發揮作用。
```py
locale.setlocale(locale.LC_COLLATE, ('sk_SK', 'UTF8'))
```
我們為斯洛伐克語設置了語言環境。
```py
w.sort(key=cmp_to_key(locale.strcoll))
```
我們對列表進行排序。 `locale.strcoll`根據當前`LC_COLLATE`設置比較兩個字符串。 `cmp_to_key`函數將`old-style`比較函數轉換為鍵函數。
```py
for e in w:
print(e)
```
我們將已排序的單詞打印到控制臺。
```py
$ ./sorting_locale.py
prameň
rum
sob
?tebot
zem
?elezo
```
元素已正確排序。 考慮了斯洛伐克字母的細節。
## Python 反轉列表元素
我們可以在 Python 中以幾種方式反轉列表中的元素。 反向元素不應與反向排序混淆。
`reversing.py`
```py
#!/usr/bin/env python
# reversing.py
a1 = ["bear", "lion", "tiger", "eagle"]
a2 = ["bear", "lion", "tiger", "eagle"]
a3 = ["bear", "lion", "tiger", "eagle"]
a1.reverse()
print(a1)
it = reversed(a2)
r = list()
for e in it:
r.append(e)
print(r)
print(a3[::-1])
```
在示例中,我們有三個相同的字符串列表。 我們以三種不同的方式反轉元素。
```py
a1.reverse()
```
第一種方法是使用`reverse()`方法。
```py
it = reversed(a2)
r = list()
for e in it:
r.append(e)
```
`reversed()`函數返回一個反向迭代器。 我們在`for`循環中使用迭代器,并創建一個新的反向列表。
```py
print(a3[::-1])
```
第三種方法是使用`slice`語法反轉列表,其中`step`參數設置為-1。
```py
$ ./reversing.py
['eagle', 'tiger', 'lion', 'bear']
['eagle', 'tiger', 'lion', 'bear']
['eagle', 'tiger', 'lion', 'bear']
```
三個列表全部顛倒了。
## Python 列表推導式
列表推導式是一種基于現有列表創建列表的語法結構。 語法受集合的數學符號的影響。 Python 語法受 Haskell 編程語言啟發。
```py
L = [expression for variable in sequence [if condition]]
```
上面的偽代碼顯示了列表推導式的語法。 列表推導式會創建一個新列表。 它基于現有列表。 `for`循環遍歷整個序列。 對于每個循環,如果滿足條件,則對表達式進行求值。 如果計算出該值,它將被添加到新列表中。 條件是可選的。
在可以使用`map()`和`filter()`和/或嵌套循環的情況下,列表推導式為創建列表提供了一種更簡潔的方法。
`list_comprehension.py`
```py
#!/usr/bin/env python
# list_comprehension.py
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
b = [e for e in a if e % 2]
print(b)
```
在示例中,我們定義了一個數字列表。 在列表推導式的幫助下,我們創建了一個新的數字列表,這些數字不能除以 2 而沒有余數。
```py
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
```
這是九個整數的列表。
```py
b = [e for e in a if e % 2]
```
這里我們有列表推導式。 在`for e in a`循環中,獲取列表的每個元素。 然后測試`if e % 2`條件。 如果滿足條件,則對表達式求值。 在我們的例子中,表達式是一個純`e`,它直接使用元素。 最后,元素被添加到列表中。
```py
$ ./list_comprehension.py
[1, 3, 5, 7, 9]
```
示例輸出。 列表中的數字不能除以 2,不能有余數。
在第二個示例中,我們將列表推導式與傳統的`for`循環進行了比較。
`list_comprehension2.py`
```py
#!/usr/bin/env python
# list_comprehension2.py
lang = "Python"
a = []
for e in lang:
a.append(ord(e))
b = [ord(e) for e in lang]
print(a)
print(b)
```
在示例中,我們有一個字符串。 我們要創建字符串字母的 ASCII 整數代碼的列表。
```py
a = []
for e in lang:
a.append(ord(e))
```
我們使用`for`循環創建這樣的列表。
```py
b = [ord(e) for e in lang]
```
這里使用列表推導產生相同的結果。 注意,省略了`if`條件。 它是可選的。
```py
$ ./list_comprehension2.py
[80, 121, 116, 104, 111, 110]
[80, 121, 116, 104, 111, 110]
```
這是示例輸出。 您可以在 [Python 列表推導](/articles/pythonlistcomprehensions/)教程中找到有關列表推導的更多信息。
## Python 映射和過濾器函數
`map()`和`filter()`函數是可在所有列表項上使用的質量函數。 它們是 Python 語言內置的函數編程的一部分。
今天,建議盡可能使用列表推導代替這些函數。
`map_fun.py`
```py
#!/usr/bin/env python
# map_fun.py
def to_upper(s):
return s.upper()
words = ["stone", "cloud", "dream", "sky"]
words2 = list(map(to_upper, words))
print(words2)
```
`map()`函數將特定函數應用于列表的每個元素。
```py
def to_upper(s):
return s.upper()
```
這是將應用于每個列表元素的函數的定義。 它在給定的字符串上調用`upper()`字符串方法。
```py
words = ["stone", "cloud", "dream", "sky"]
```
這是字符串列表。
```py
words2 = map(to_upper, words)
print(words2)
```
`map()`函數將`to_upper()`函數應用于單詞列表的每個字符串元素。 形成一個新列表并返回。 我們將其打印到控制臺。
```py
$ ./map_fun.py
['STONE', 'CLOUD', 'DREAM', 'SKY']
```
列表中的每一項均以大寫字母表示。
`filter()`函數從列表的那些元素中為函數返回`true`的列表構造一個列表。
`filter_fun.py`
```py
#!/usr/bin/env python
# filter_fun.py
def positive(x):
return x > 0
n = [-2, 0, 1, 2, -3, 4, 4, -1]
print(list(filter(positive, n)))
```
演示`filter()`函數的示例。 它將創建一個僅具有正值的新列表。 它將濾除所有負值和 0。
```py
def positive(x):
return x > 0
```
這是`filter()`函數使用的函數的定義。 返回`True`或`False`。 返回布爾值的函數稱為謂詞。
```py
$ ./filter_fun.py
[1, 2, 4, 4]
```
`filter_fun.py`腳本的輸出。
在 Python 教程的這一部分中,我們描述了 Python 列表。
- ZetCode 數據庫教程
- MySQL 教程
- MySQL 簡介
- MySQL 安裝
- MySQL 的第一步
- MySQL 快速教程
- MySQL 存儲引擎
- MySQL 數據類型
- 在 MySQL 中創建,更改和刪除表
- MySQL 表達式
- 在 MySQL 中插入,更新和刪除數據
- MySQL 中的SELECT語句
- MySQL 子查詢
- MySQL 約束
- 在 MySQL 中導出和導入數據
- 在 MySQL 中連接表
- MySQL 函數
- MySQL 中的視圖
- MySQL 中的事務
- MySQL 存儲過程
- MySQL Python 教程
- MySQL Perl 教程
- MySQL & Perl DBI
- 使用 Perl 連接到 MySQL 數據庫
- MySQL 中的 Perl 錯誤處理
- 使用 Perl 進行 MySQL 查詢
- 在 MySQL 中使用 Perl 綁定參數&列
- 在 MySQL 中使用 Perl 處理圖像
- 使用 Perl 獲取 MySQL 元數據
- Perl 的 MySQL 事務
- MySQL C API 編程教程
- MySQL Visual Basic 教程
- MySQL PHP 教程
- MySQL Java 教程
- MySQL Ruby 教程
- MySQL C# 教程
- SQLite 教程
- SQLite 簡介
- sqlite3 命令行工具
- 在 SQLite 中創建,刪除和更改表
- SQLite 表達式
- SQLite 插入,更新,刪除數據
- SQLite SELECT語句
- SQLite 約束
- SQLite 連接表
- SQLite 函數
- SQLite 視圖,觸發器,事務
- SQLite C 教程
- SQLite Python 教程
- SQLite Perl 教程
- Perl DBI
- 使用 Perl 連接到 SQLite 數據庫
- SQLite Perl 錯誤處理
- 使用 Perl 的 SQLite 查詢
- 使用 Perl 綁定 SQLite 參數&列
- 使用 Perl 在 SQLite 中處理圖像
- 使用 Perl 獲取 SQLite 元數據
- 使用 Perl 進行 SQLite 事務
- SQLite Ruby 教程
- 連接到 SQLite 數據庫
- 在 SQLite 中使用 Ruby 進行 SQL 查詢
- 綁定參數
- 處理圖像
- 使用 Ruby 獲取 SQLite 元數據
- Ruby 的 SQLite 事務
- SQLite C# 教程
- SQLite C# 簡介
- 使用SqliteDataReader檢索數據
- ADO.NET 數據集
- 使用 C# 在 SQLite 中處理圖像
- 使用 C# 獲取 SQLite 元數據
- 使用 C# 的 SQLite 事務
- SQLite Visual Basic 教程
- SQLite Visual Basic 簡介
- 使用SqliteDataReader檢索數據
- ADO.NET 的數據集
- 使用 Visual Basic 在 SQLite 中處理圖像
- 使用 Visual Basic 獲取 SQLite 元數據
- 使用 Visual Basic 的 SQLite 事務
- PostgreSQL C 教程
- PostgreSQL Ruby 教程
- PostgreSQL PHP 教程
- PostgreSQL PHP 編程簡介
- 在 PostgreSQL 中使用 PHP 檢索數據
- 在 PostgreSQL 中使用 PHP 處理圖像
- 用 PHP 獲取 PostgreSQL 元數據
- 在 PostgreSQL 中使用 PHP 進行事務
- PostgreSQL Java 教程
- Apache Derby 教程
- Derby 簡介
- Derby 的安裝&配置
- Derby 工具
- ij 工具
- Derby 中的 SQL 查詢
- 在 Derby 中使用 JDBC 進行編程
- Derby 安全
- 使用 Derby & Apache Tomcat
- NetBeans 和 Derby
- SQLAlchemy 教程
- SQLAlchemy 簡介
- 原始 SQL
- 模式定義語言
- SQL 表達式語言
- SQLAlchemy 中的對象關系映射器
- MongoDB PHP 教程
- MongoDB JavaScript 教程
- MongoDB Ruby 教程
- Spring JdbcTemplate 教程
- JDBI 教程
- MyBatis 教程
- Hibernate Derby 教程
- ZetCode .NET 教程
- Visual Basic 教程
- Visual Basic
- Visual Basic 語法結構
- 基本概念
- Visual Basic 數據類型
- Visual Basic 中的字符串
- 運算符
- 控制流
- Visual Basic 數組
- Visual Basic 中的過程&函數
- 在 Visual Basic 中組織代碼
- 面向對象編程
- Visual Basic 中的面向對象編程 II
- Visual Basic 中的集合
- 輸入和輸出
- C# 教程
- C# 語言
- C# 語法結構
- C# 基礎
- C# 數據類型
- C# 中的字符串
- C# 運算符
- C# 中的流控制
- C# 數組
- C# 面向對象編程
- C# 中的方法
- C# 面向對象編程 II
- C# 屬性
- C# 結構
- C# 委托
- 命名空間
- C# 集合
- C# 輸入和輸出
- C# 目錄教程
- C# 字典教程
- 在 C# 中讀取文本文件
- C# 中的日期和時間
- 在 C# 中讀取網頁
- C# HttpClient教程
- ASP.NET Core 教程
- ZetCode 圖形教程
- Java 2D 游戲教程
- Java 游戲基礎
- 動畫
- 移動精靈
- 碰撞檢測
- Java 益智游戲
- Java Snake
- Breakout 游戲
- Java 俄羅斯方塊
- Java 吃豆人
- Java 太空侵略者
- Java 掃雷
- Java 推箱子
- Java 2D 教程
- 介紹
- 基本繪圖
- 形狀和填充
- 透明度
- 合成
- 剪裁
- 變換
- 特效
- 圖像
- 文字和字體
- 命中測試,移動物體
- 俄羅斯方塊
- Cario 圖形教程
- Cario 圖形庫
- Cario 定義
- Cairo 后端
- Cairo 基本圖形
- 形狀和填充
- 漸變
- 透明度
- 合成
- 剪裁和遮罩
- 變換
- Cairo 文字
- Cairo 中的圖像
- 根窗口
- PyCairo 教程
- PyCairo 簡介
- PyCairo 后端
- PyCairo 中的基本繪圖
- PyCairo 形狀和填充
- PyCairo 漸變
- PyCairo 剪裁&遮罩
- PyCairo 的透明度
- PyCairo 中的變換
- PyCairo 中的文字
- PyCairo 中的圖像
- 根窗口
- HTML5 畫布教程
- 介紹
- HTML5 畫布中的直線
- HTML5 畫布形狀
- HTML5 畫布填充
- HTML5 畫布中的透明度
- HTML5 畫布合成
- HTML5 canvas 中的變換
- HTML5 畫布中的文字
- HTML5 畫布中的動畫
- HTML5 畫布中的 Snake
- ZetCode GUI 教程
- Windows API 教程
- Windows API 簡介
- Windows API main函數
- Windows API 中的系統函數
- Windows API 中的字符串
- Windows API 中的日期和時間
- Windows API 中的一個窗口
- UI 的第一步
- Windows API 菜單
- Windows API 對話框
- Windows API 控件 I
- Windows API 控件 II
- Windows API 控件 III
- Windows API 中的高級控件
- Windows API 中的自定義控件
- Windows API 中的 GDI
- PyQt4 教程
- PyQt4 簡介
- PyQt4 中的第一個程序
- PyQt4 中的菜單和工具欄
- PyQt4 中的布局管理
- PyQt4 中的事件和信號
- PyQt4 中的對話框
- PyQt4 小部件
- PyQt4 小部件 II
- PyQt4 中的拖放
- PyQt4 中的繪圖
- PyQt4 中的自定義小部件
- PyQt4 中的俄羅斯方塊游戲
- PyQt5 教程
- PyQt5 簡介
- PyQt5 日期和時間
- PyQt5 中的第一個程序
- PyQt5 中的菜單和工具欄
- PyQt5 中的布局管理
- PyQt5 中的事件和信號
- PyQt5 中的對話框
- PyQt5 小部件
- PyQt5 小部件 II
- PyQt5 拖放
- PyQt5 中的繪圖
- PyQt5 中的自定義小部件
- PyQt5 中的俄羅斯方塊
- Qt4 教程
- Qt4 工具包簡介
- Qt4 工具類
- Qt4 中的字符串
- Qt4 中的日期和時間
- 在 Qt4 中使用文件和目錄
- Qt4 中的第一個程序
- Qt4 中的菜單和工具欄
- Qt4 中的布局管理
- Qt4 中的事件和信號
- Qt4 小部件
- Qt4 小部件 II
- Qt4 中的繪圖
- Qt4 中的自定義小部件
- Qt4 中的打磚塊游戲
- Qt5 教程
- Qt5 工具包簡介
- Qt5 中的字符串
- Qt5 中的日期和時間
- Qt5 中的容器
- 在 Qt5 中處理文件和目錄
- Qt5 中的第一個程序
- Qt5 中的菜單和工具欄
- Qt5 中的布局管理
- Qt5 中的事件和信號
- Qt5 小部件
- Qt5 小部件 II
- Qt5 中的繪圖
- Qt5 中的自定義小部件
- Qt5 中的貪食蛇
- Qt5 中的打磚塊游戲
- PySide 教程
- PySide 工具包簡介
- PySide 中的第一個程序
- PySide 中的菜單和工具欄
- PySide 中的布局管理
- PySide 中的事件和信號
- PySide 中的對話框
- PySide 小部件
- PySide 小部件 II
- 在 PySide 中拖放
- 在 PySide 中繪圖
- PySide 中的自定義小部件
- PySide 中的俄羅斯方塊游戲
- Tkinter 教程
- Tkinter 簡介
- Tkinter 中的布局管理
- Tkinter 標準小部件屬性
- Tkinter 小部件
- Tkinter 中的菜單和工具欄
- Tkinter 中的對話框
- Tkinter 中的繪圖
- Tkinter 中的貪食蛇
- Tcl/Tk 教程
- Tcl/Tk 簡介
- Tcl/Tk 中的布局管理
- Tcl/Tk 小部件
- Tcl/Tk 中的菜單和工具欄
- Tcl/Tk 中的對話框
- Tcl/Tk 繪圖
- 貪食蛇
- Qt 快速教程
- Java Swing 教程
- Java Swing 簡介
- Java Swing 首個程序
- Java Swing 中的菜單和工具欄
- Swing 布局管理
- GroupLayout管理器
- Java Swing 事件
- 基本的 Swing 組件
- 基本的 Swing 組件 II
- Java Swing 對話框
- Java Swing 模型架構
- Swing 中的拖放
- Swing 中的繪圖
- Java Swing 中的可調整大小的組件
- Java Swing 中的益智游戲
- 俄羅斯方塊
- JavaFX 教程
- JavaFX 簡介
- JavaFX 首個程序
- JavaFX 布局窗格
- 基本的 JavaFX 控件
- 基本 JavaFX 控件 II
- JavaFX 事件
- JavaFX 效果
- JavaFX 動畫
- JavaFX 畫布
- JavaFX 圖表
- Java SWT 教程
- Java SWT 簡介
- Java SWT 中的布局管理
- Java SWT 中的菜單和工具欄
- Java SWT 中的小部件
- Table小部件
- Java SWT 中的對話框
- Java SWT 繪圖
- Java SWT 中的貪食蛇
- wxWidgets 教程
- wxWidgets 簡介
- wxWidgets 助手類
- wxWidgets 中的第一個程序
- wxWidgets 中的菜單和工具欄
- wxWidgets 中的布局管理
- wxWidgets 中的事件
- wxWidgets 中的對話框
- wxWidgets 小部件
- wxWidgets 小部件 II
- wxWidgets 中的拖放
- wxWidgets 中的設備上下文
- wxWidgets 中的自定義小部件
- wxWidgets 中的俄羅斯方塊游戲
- wxPython 教程
- wxPython 簡介
- 第一步
- 菜單和工具欄
- wxPython 中的布局管理
- wxPython 中的事件
- wxPython 對話框
- 小部件
- wxPython 中的高級小部件
- wxPython 中的拖放
- wxPython 圖形
- 創建自定義小部件
- wxPython 中的應用框架
- wxPython 中的俄羅斯方塊游戲
- C# Winforms Mono 教程
- Mono Winforms 簡介
- Mono Winforms 中的第一步
- Mono Winforms 中的布局管理
- Mono Winforms 中的菜單和工具欄
- Mono Winforms 中的基本控件
- Mono Winforms 中的高級控件
- 對話框
- Mono Winforms 中的拖放
- Mono Winforms 中的繪圖
- Mono Winforms 中的貪食蛇
- Java Gnome 教程
- Java Gnome 簡介
- Java Gnome 的第一步
- Java Gnome 中的布局管理
- Java Gnome 中的布局管理 II
- Java Gnome 中的菜單
- Java Gnome 中的工具欄
- Java Gnome 中的事件
- Java Gnome 中的小部件
- Java Gnome 中的小部件 II
- Java Gnome 中的高級小部件
- Java Gnome 中的對話框
- Java Gnome 中的 Pango
- 在 Java Gnome 中用 Cairo 繪圖
- Cario 繪圖 II
- Java Gnome 中的貪食蛇
- QtJambi 教程
- QtJambi 簡介
- QtJambi 中的布局管理
- QtJambi 中的小部件
- QtJambi 中的菜單和工具欄
- QtJambi 對話框
- QtJambi 中的繪圖
- QtJambi 中的自定義小部件
- 貪食蛇
- GTK+ 教程
- GTK+ 簡介
- GTK+ 中的第一個程序
- GTK+ 中的菜單和工具欄
- GTK+ 布局管理
- GTK+ 事件和信號
- GTK+ 對話框
- GTK+ 小部件
- GTK+ 小部件 II
- GtkTreeView小部件
- GtkTextView小部件
- 自定義 GTK+ 小部件
- Ruby GTK 教程
- Ruby GTK 簡介
- Ruby GTK 中的布局管理
- Ruby GTK 中的小部件
- Ruby GTK 中的菜單和工具欄
- Ruby GTK 中的對話框
- Ruby GTK Cario 繪圖
- Ruby GTK 中的自定義小部件
- Ruby GTK 中的貪食蛇
- GTK# 教程
- GTK# 簡介
- GTK 的第一步
- GTK# 中的布局管理
- GTK 中的菜單
- GTK# 中的工具欄
- GTK# 中的事件
- GTK# 中的小部件
- GTK 中的小部件 II
- GTK# 中的高級小部件
- GTK# 中的對話框
- Pango
- GTK# 中的 Cario 繪圖
- GTK# 中的 Cario 繪圖 II
- GTK# 中的自定義小部件
- Visual Basic GTK# 教程
- Visual Basic GTK# 簡介
- 布局管理
- 小部件
- 菜單和工具欄
- 對話框
- Cario 繪圖
- 自定義小部件
- 貪食蛇
- PyGTK 教程
- PyGTK 簡介
- PyGTK 的第一步
- PyGTK 中的布局管理
- PyGTK 中的菜單
- PyGTK 中的工具欄
- PyGTK 中的事件和信號
- PyGTK 中的小部件
- PyGTK 中的小部件 II
- PyGTK 中的高級小部件
- PyGTK 中的對話框
- Pango
- Pango II
- PyGTK 中的 Cario 繪圖
- Cario 繪圖 II
- PyGTK 中的貪食蛇游戲
- PyGTK 中的自定義小部件
- PHP GTK 教程
- PHP GTK 簡介
- PHP GTK 中的布局管理
- PHP GTK 中的小部件
- PHP GTK 中的菜單和工具欄
- 對話框
- Cario 繪圖
- 自定義小部件
- 貪食蛇
- C# Qyoto 教程
- Qyoto 介紹
- 布局管理
- Qyoto 中的小部件
- Qyoto 中的菜單和工具欄
- Qyoto 對話框
- Qyoto 中的繪圖
- Qyoto 中的繪圖 II
- Qyoto 中的自定義小部件
- 貪食蛇
- Ruby Qt 教程
- Ruby Qt 簡介
- Ruby Qt 中的布局管理
- Ruby Qt 中的小部件
- 菜單和工具欄
- Ruby Qt 中的對話框
- 用 Ruby Qt 繪圖
- Ruby Qt 中的自定義小部件
- Ruby Qt 中的貪食蛇
- Visual Basic Qyoto 教程
- Qyoto 介紹
- 布局管理
- Qyoto 中的小部件
- Qyoto 中的菜單和工具欄
- Qyoto 對話框
- Qyoto 中的繪圖
- Qyoto 中的自定義小部件
- 貪食蛇
- Mono IronPython Winforms 教程
- 介紹
- IronPython Mono Winforms 中的第一步
- 布局管理
- 菜單和工具欄
- Mono Winforms 中的基本控件
- Mono Winforms 中的基本控件 II
- Mono Winforms 中的高級控件
- 對話框
- Mono Winforms 中的拖放
- 繪圖
- IronPython Mono Winforms 中的繪圖 II
- IronPython Mono Winforms 中的貪食蛇
- IronPython Mono Winforms 中的俄羅斯方塊游戲
- FreeBASIC GTK 教程
- Jython Swing 教程
- Jython Swing 簡介
- Jython Swing 中的布局管理
- Jython Swing 中的組件
- Jython Swing 中的菜單和工具欄
- Jython Swing 中的對話框
- Jython Swing 中的繪圖
- Jython Swing 中的半字節
- JRuby Swing 教程
- JRuby Swing 簡介
- JRuby Swing 中的布局管理
- JRuby Swing 中的組件
- 菜單和工具欄
- JRuby Swing 中的對話框
- 在 JRuby Swing 中繪圖
- JRuby Swing 中的貪食蛇
- Visual Basic Winforms 教程
- Visual Basic Winforms 簡介
- 布局管理
- 基本控制
- 進階控件
- 菜單和工具欄
- 對話框
- 繪圖
- 拖放
- 貪食蛇
- JavaScript GTK 教程
- JavaScript GTK 簡介
- 布局管理
- JavaScript GTK 中的小部件
- JavaScript GTK 中的菜單和工具欄
- JavaScript GTK 中的對話框
- JavaScript GTK 中的 Cario 繪圖
- ZetCode Java 教程
- Java 教程
- Java 語言
- Java 語法結構
- Java 基礎
- Java 數據類型
- Java 數據類型 II
- Java 字符串
- Java 數組
- Java 表達式
- Java 控制流程
- Java 面向對象的編程
- Java 方法
- Java 面向對象編程 II
- Java 包
- Java 中的異常
- Java 集合
- Java 流
- Java Future 教程
- Java Comparable和Comparator
- Java DOM 教程
- Java MVC 教程
- Java SAX 教程
- Java JAXB 教程
- Java JSON 處理教程
- Java H2 教程
- MongoDB Java 教程
- Java 正則表達式教程
- Java PDFBox 教程
- Java 文件教程
- Java Files.list教程
- Java Files.walk教程
- Java DirectoryStream教程
- Java 外部與內部迭代器
- Java 文件大小
- 用 Java 創建目錄
- 用 Java 創建文件
- Java Log4j 教程
- Gson 教程
- Java RequestDispatcher
- Java HTTP GET/POST 請求
- Java InputStream教程
- Java FileOutputStream教程
- Java FileInputStream教程
- Java ZipInputStream教程
- Java FileWriter教程
- EJB 簡介
- Java forEach教程
- Jetty 教程
- Tomcat Derby 教程
- Stripes 介紹
- 使用 Stripes 的 Java webapp,MyBatis,& Derby
- EclipseLink 簡介
- Java 中的數據源
- JSTL 中的 SQL 查詢標記
- Java 驗證過濾器
- Hibernate 驗證器
- 用 Java 顯示圖像
- Play 框架簡介
- Spark Java 簡介
- Java ResourceBundle教程
- Jtwig 教程
- Java Servlet 教程
- Java 套接字教程
- FreeMarker 教程
- Android 教程
- Java EE 5 教程
- JSoup 教程
- JFreeChart 教程
- ImageIcon教程
- 用 Java 復制文件
- Java 文件時間教程
- 如何使用 Java 獲取當前日期時間
- Java 列出目錄內容
- Java 附加到文件
- Java ArrayList教程
- 用 Java 讀寫 ICO 圖像
- Java int到String的轉換
- Java HashSet教程
- Java HashMap教程
- Java static關鍵字
- Java 中的HashMap迭代
- 用 Java 過濾列表
- 在 Java 中讀取網頁
- Java 控制臺應用
- Java 集合的便利工廠方法
- Google Guava 簡介
- OpenCSV 教程
- 用 Java8 的StringJoiner連接字符串
- Java 中元素迭代的歷史
- Java 謂詞
- Java StringBuilder
- Java 分割字串教學
- Java NumberFormat
- Java TemporalAdjusters教程
- Apache FileUtils教程
- Java Stream 過濾器
- Java 流歸約
- Java 流映射
- Java InputStreamReader教程
- 在 Java 中讀取文本文件
- Java Unix 時間
- Java LocalTime
- Java 斐波那契
- Java ProcessBuilder教程
- Java 11 的新功能
- ZetCode JavaScript 教程
- Ramda 教程
- Lodash 教程
- Collect.js 教程
- Node.js 簡介
- Node HTTP 教程
- Node-config 教程
- Dotenv 教程
- Joi 教程
- Liquid.js 教程
- faker.js 教程
- Handsontable 教程
- PouchDB 教程
- Cheerio 教程
- Axios 教程
- Jest 教程
- JavaScript 正則表達式
- 用 JavaScript 創建對象
- Big.js 教程
- Moment.js 教程
- Day.js 教程
- JavaScript Mustache 教程
- Knex.js 教程
- MongoDB JavaScript 教程
- Sequelize 教程
- Bookshelf.js 教程
- Node Postgres 教程
- Node Sass 教程
- Document.querySelector教程
- Document.all教程
- JSON 服務器教程
- JavaScript 貪食蛇教程
- JavaScript 構建器模式教程
- JavaScript 數組
- XMLHttpRequest教程
- 從 JavaScript 中的 URL 讀取 JSON
- 在 JavaScript 中循環遍歷 JSON 數組
- jQuery 教程
- Google 圖表教程
- ZetCode Kotlin 教程
- Kotlin Hello World 教程
- Kotlin 變量
- Kotlin 的運算符
- Kotlin when表達式
- Kotlin 數組
- Kotlin 范圍
- Kotlin Snake
- Kotlin Swing 教程
- Kotlin 字符串
- Kotlin 列表
- Kotlin 映射
- Kotlin 集合
- Kotlin 控制流程
- Kotlin 寫入文件
- Kotlin 讀取文件教程
- Kotlin 正則表達式
- ZetCode 其它教程
- TCL 教程
- Tcl
- Tcl 語法結構
- Tcl 中的基本命令
- Tcl 中的表達式
- Tcl 中的控制流
- Tcl 中的字符串
- Tcl 列表
- Tcl 中的數組
- Tcl 中的過程
- 輸入&輸出
- AWK 教程
- Vaadin 教程
- Vaadin 框架介紹
- Vaadin Grid教程
- Vaadin TextArea教程
- Vaadin ComboBox教程
- Vaadin Slider教程
- Vaadin CheckBox教程
- Vaadin Button教程
- Vaadin DateField教程
- Vaadin Link教程
- ZetCode PHP 教程
- PHP 教程
- PHP
- PHP 語法結構
- PHP 基礎
- PHP 數據類型
- PHP 字符串
- PHP 運算符
- PHP 中的控制流
- PHP 數組
- PHP 數組函數
- PHP 中的函數
- PHP 正則表達式
- PHP 中的面向對象編程
- PHP 中的面向對象編程 II
- PHP Carbon 教程
- PHP Monolog 教程
- PHP 配置教程
- PHP Faker 教程
- Twig 教程
- Valitron 教程
- Doctrine DBAL QueryBuilder 教程
- PHP Respect 驗證教程
- PHP Rakit 驗證教程
- PHP PDO 教程
- CakePHP 數據庫教程
- PHP SQLite3 教程
- PHP 文件系統函數
- ZetCode Python 教程
- Python 教程
- Python 語言
- 交互式 Python
- Python 語法結構
- Python 數據類型
- Python 字符串
- Python 列表
- Python 字典
- Python 運算符
- Python 關鍵字
- Python 函數
- Python 中的文件
- Python 中的面向對象編程
- Python 模塊
- Python 中的包
- Python 異常
- Python 迭代器和生成器
- Python 內省
- Python Faker 教程
- Python f 字符串教程
- Python bcrypt 教程
- Python 套接字教程
- Python smtplib教程
- OpenPyXL 教程
- Python pathlib教程
- Python YAML 教程
- Python 哈希教程
- Python ConfigParser教程
- Python 日志教程
- Python argparse 教程
- Python SQLite 教程
- Python Cerberus 教程
- Python PostgreSQL 教程
- PyMongo 教程
- PyMySQL 教程
- Peewee 教程
- pyDAL 教程
- pytest 教程
- Bottle 教程
- Python Jinja 教程
- PrettyTable 教程
- BeautifulSoup 教程
- pyquery 教程
- Python for循環
- Python 反轉
- Python Lambda 函數
- Python 集合
- Python 映射
- Python CSV 教程-讀寫 CSV
- Python 正則表達式
- Python SimpleJson 教程
- SymPy 教程
- Pandas 教程
- Matplotlib 教程
- Pillow 教程
- Python FTP 教程
- Python Requests 教程
- Python Arrow 教程
- Python 列表推導式
- Python 魔術方法
- PyQt 中的QPropertyAnimation
- PyQt 中的QNetworkAccessManager
- ZetCode Ruby 教程
- Ruby 教程
- Ruby
- Ruby 語法結構
- Ruby 基礎
- Ruby 變量
- Ruby 中的對象
- Ruby 數據類型
- Ruby 字符串
- Ruby 表達式
- Ruby 控制流
- Ruby 數組
- Ruby 哈希
- Ruby 中的面向對象編程
- Ruby 中的面向對象編程 II
- Ruby 正則表達式
- Ruby 輸入&輸出
- Ruby HTTPClient教程
- Ruby Faraday 教程
- Ruby Net::HTTP教程
- ZetCode Servlet 教程
- 從 Java Servlet 提供純文本
- Java Servlet JSON 教程
- Java Servlet HTTP 標頭
- Java Servlet 復選框教程
- Java servlet 發送圖像教程
- Java Servlet JQuery 列表教程
- Servlet FreeMarker JdbcTemplate 教程-CRUD 操作
- jQuery 自動補全教程
- Java servlet PDF 教程
- servlet 從 WAR 內讀取 CSV 文件
- Java HttpServletMapping
- EasyUI datagrid
- Java Servlet RESTFul 客戶端
- Java Servlet Log4j 教程
- Java Servlet 圖表教程
- Java ServletConfig教程
- Java Servlet 讀取網頁
- 嵌入式 Tomcat
- Java Servlet 分頁
- Java Servlet Weld 教程
- Java Servlet 上傳文件
- Java Servlet 提供 XML
- Java Servlet 教程
- JSTL forEach標簽
- 使用 jsGrid 組件
- ZetCode Spring 教程
- Spring @Bean注解教程
- Spring @Autowired教程
- Spring @GetMapping教程
- Spring @PostMapping教程
- Spring @DeleteMapping教程
- Spring @RequestMapping教程
- Spring @PathVariable教程
- Spring @RequestBody教程
- Spring @RequestHeader教程
- Spring Cookies 教程
- Spring 資源教程
- Spring 重定向教程
- Spring 轉發教程
- Spring ModelAndView教程
- Spring MessageSource教程
- Spring AnnotationConfigApplicationContext
- Spring BeanFactoryPostProcessor教程
- Spring BeanFactory教程
- Spring context:property-placeholder教程
- Spring @PropertySource注解教程
- Spring @ComponentScan教程
- Spring @Configuration教程
- Spring C 命名空間教程
- Spring P 命名空間教程
- Spring bean 引用教程
- Spring @Qualifier注解教程
- Spring ClassPathResource教程
- Spring 原型作用域 bean
- Spring Inject List XML 教程
- Spring 概要文件 XML 教程
- Spring BeanDefinitionBuilder教程
- Spring 單例作用域 bean
- 獨立的 Spring 應用
- 經典 Spring 應用中的JdbcTemplate
- Spring EmbeddedDatabaseBuilder教程
- Spring HikariCP 教程
- Spring Web 應用簡介
- Spring BeanPropertyRowMapper教程
- Spring DefaultServlet教程
- Spring WebSocket 教程
- Spring WebJars 教程
- Spring @MatrixVariable教程
- Spring Jetty 教程
- Spring 自定義 404 錯誤頁面教程
- Spring WebApplicationInitializer教程
- Spring BindingResult教程
- Spring FreeMarker 教程
- Spring Thymeleaf 教程
- Spring ResourceHandlerRegistry教程
- SpringRunner 教程
- Spring MockMvc 教程
- ZetCode Spring Boot 教程
- Spring Boot 發送電子郵件教程
- Spring Boot WebFlux 教程
- Spring Boot ViewControllerRegistry教程
- Spring Boot CommandLineRunner教程
- Spring Boot ApplicationReadyEvent 教程
- Spring Boot CORS 教程
- Spring Boot @Order教程
- Spring Boot @Lazy教程
- Spring Boot Flash 屬性
- Spring Boot CrudRepository 教程
- Spring Boot JpaRepository 教程
- Spring Boot findById 教程
- Spring Boot Data JPA @NamedQuery教程
- Spring Boot Data JPA @Query教程
- Spring Boot Querydsl 教程
- Spring Boot Data JPA 排序教程
- Spring Boot @DataJpaTest教程
- Spring Boot TestEntityManager 教程
- Spring Boot Data JPA 派生的查詢
- Spring Boot Data JPA 查詢示例
- Spring Boot Jersey 教程
- Spring Boot CSV 教程
- SpringBootServletInitializer教程
- 在 Spring Boot 中加載資源
- Spring Boot H2 REST 教程
- Spring Boot RestTemplate
- Spring Boot REST XML 教程
- Spring Boot Moustache 教程
- Spring Boot Thymeleaf 配置
- Spring Boot 自動控制器
- Spring Boot FreeMarker 教程
- Spring Boot Environment
- Spring Boot Swing 集成教程
- 在 Spring Boot 中提供圖像文件
- 在 Spring Boot 中創建 PDF 報告
- Spring Boot 基本注解
- Spring Boot @ResponseBody教程
- Spring Boot @PathVariable教程
- Spring Boot REST Data JPA 教程
- Spring Boot @RequestParam教程
- Spring Boot 列出 bean
- Spring Boot @Bean
- Spring Boot @Qualifier教程
- 在 Spring Boot 中提供靜態內容
- Spring Boot Whitelabel 錯誤
- Spring Boot DataSourceBuilder 教程
- Spring Boot H2 教程
- Spring Boot Web JasperReports 集成
- Spring Boot iText 教程
- Spring Boot cmd JasperReports 集成
- Spring Boot RESTFul 應用
- Spring Boot 第一個 Web 應用
- Spring Boot Groovy CLI
- Spring Boot 上傳文件
- Spring Boot @ExceptionHandler
- Spring Boot @ResponseStatus
- Spring Boot ResponseEntity
- Spring Boot @Controller
- Spring Boot @RestController
- Spring Boot @PostConstruct
- Spring Boot @Component
- Spring Boot @ConfigurationProperties教程
- Spring Boot @Repository
- Spring Boot MongoDB 教程
- Spring Boot MongoDB Reactor 教程
- Spring Boot PostgreSQL 教程
- Spring Boot @ModelAttribute
- Spring Boot 提交表單教程
- Spring Boot Model
- Spring Boot MySQL 教程
- Spring Boot GenericApplicationContext
- SpringApplicationBuilder教程
- Spring Boot Undertow 教程
- Spring Boot 登錄頁面教程
- Spring Boot RouterFunction 教程
- ZetCode Symfony 教程
- Symfony DBAL 教程
- Symfony 表單教程
- Symfony CSRF 教程
- Symfony Vue 教程
- Symfony 簡介
- Symfony 請求教程
- Symfony HttpClient教程
- Symfony Flash 消息
- 在 Symfony 中發送郵件
- Symfony 保留表單值
- Symfony @Route注解教程
- Symfony 創建路由
- Symfony 控制臺命令教程
- Symfony 上傳文件
- Symfony 服務教程
- Symfony 驗證教程
- Symfony 翻譯教程