Tcler 的 Python 学习概要:List
List / 列表
List 广义的来说,指一个序列,下面这些类似的概念都可以认为是一个 List
- C/C++ 以及很多程序语言里面的数组
- Tcl 语言里面的 list
- Python 语言里面的 Sequence
List主要特征是一组元素的有序排列,可以通过数值下标来访问其中第n个元素。
根据这个特征来说,
- 计算机的内存是一个list, 元素是字节。
- 程序的指令是一个list,元素是单个指令。
- 字符串是一个list, 元素是字符——通常是可打印字符。
- 日复一日是一个list,元素可以是日、月、年、星期等。
- 搜索引擎的查询结果可以看作是一个排序后的list
- 考试或比赛的排名可以看作是对list的排序
List是很基本的数据结构,很多问题或算法的实质都可以归纳为对list的改动、查找、排序等操作。
list 的基本操作
操作 | Tcl | Python |
---|---|---|
创建 | set alist [list 1 2 3] |
alist = [1, 2, 3] |
长度 | llength $alist |
len(alist) |
索引 | lindex $alist 0 |
alist[0] |
改动 | lset alist 0 9 |
alist[0] = 9 |
区间 | lrange $alist 1 2 |
alist[1:3] |
追加 | lappend alist 4 |
alist.append(4) |
合并 | concat $alist {7 8 9} |
alist + [7, 8, 9] |
删除 | lreplace $alist 2 3 |
alist[2:4] = [] |
插入 | linsert $alist 2 $x |
alist = alist[0:2] + [x] + alist[2:] |
最小值 | lindex [lsort $alist] 0 |
min(alist) |
计数 | llength [lsearch $alist $x] |
alist.count(x) |
查找 | lsearch $alist $x |
alist.index(x) |
存在 | $x in $alist |
x in alist |
alist[1:3]
这种区间索引等效于索引区间[1, 3)
list的遍历
foreach item $tcl_list {
puts $item
}
for item in $python_list:
print($item)
turple = 只读的 list
turple 可以看作是 readonly list 或者叫做 immutable list。
python_turple = (1, 2, 3)
range = 只读的自然数序列
range(start, stop)
返回自然数区间 [stop, stop)
。range返回的序列是只读的(immutable)。
用Tcl代码表示range的效果的话,类似于:
proc range {start stop {step 1}} {
set result [list]
while { $start < $stop } {
lappend result $start
incr start $step
}
return $result
}
str 是字符组成的 list
Python里的str类型是字符组成的 list。
由于字符串类型过于常见,因而单独作为一种数据类型,并提供相应的函数以便于操作。但从概念实质上来讲,就是一个list。
与此类似的还有 Erlang 里面的字符串。
bytes 和 bytearray 是字节组成的 list
str类型里面的字符通常是可读字符。但程序世界毕竟是以字节为单位的。
Python里的bytes类型,是由字节的组成的list,可以表示任何二进制数据。
这里的字节可以认为是一个 unsigned char
,即一个大小在[0, 255]
之内的整数。
bytes 类型是只读的(immutable),bytearray类型则是可写的(muttable)。
memoryview 是内存单元组成的 list
bytes和bytearray类型的元素都是单个字节,但程序世界里很多时候会把一组连续的自己当作一个整体处理。如果list的元素不再限定为单个字节,而是允许连续的多个字节,那么就是memoryview了,即元素是一块内存单元的list。