list
是有序且可變群集(Collection),在 Python 中,[1, 2, 3]
這樣的語法,即可建立含元素 1、2、3 而索引 0、1、2 的list
實例。
list
與先前介紹過的 string
享有共同的操作。len
傳回 list
長度;in
可測試某元素是否在 list
中;+
可以用來串接兩個list
;*
可用來複製出指定數量的 list
。[]
可以指定索引,用以從list
中取得元素,負索引是從最後一個元素計數,使用 []
來切割 list
或許是最有用的功能。其他操作還有…
1
2
3
4
5
6
7
|
>>> [
0
] *
10
[
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
]
>>>
', '
.join([
'justin'
,
'caterpillar'
,
'openhome'
])
'justin, caterpillar, openhome'
>>> list(
'justin'
)
[
'j'
,
'u'
,
's'
,
't'
,
'i'
,
'n'
]
>>>
|
List 解析介绍
>>> li = [1, 9, 8, 4] >>> [elem*2 for elem in li]
[2, 18, 16, 8] >>> li
[1, 9, 8, 4] >>> li = [elem*2 for elem in li]
>>> li [2, 18, 16, 8]
您有了一个形如 key=value 的 key-value 对 list,并且想将它们合成为单个字符串。为了将任意包含字符串的 list 连接成单个字符串,可以使用字符串对象的join 方法。
下面是一个在 buildConnectionString 函数中连接 list 的例子:
return ";".join(["%s=%s" % (k, v) for k, v in params.items()])
在我们继续之前有一个有趣的地方。我一直在重复函数是对象,字符串是对象,每个东西都是对象的概念。您也许认为我的意思是说字符串值 是对象。但是不对,仔细地看一下这个例子,您将会看到字符串";" 本身就是一个对象,您在调用它的 join 方法。
总之,这里的 join 方法将 list 中的元素连接成单个字符串,每个元素用一个分号隔开。分隔符不必是一个分号;它甚至不必是单个字符。它可以是任何字符串。
l2=l1[:],例如:
- >>> l1=["hello","world"]
- >>> l2=l1[:]
- >>> print l1
- ['hello', 'world']
- >>> print l2
- ['hello', 'world']
- >>> l1[0]="world"
- >>> print l1
- ['world', 'world']
- >>> print l2
- ['hello', 'world']
判断一个 list 是否为空
传统的方式:
if len(mylist):
# Do something with my list
else:
# The list is empty
由于一个空 list 本身等同于 False,所以可以直接:
if mylist:
# Do something with my list
else:
# The list is empty
遍历 list 的同时获取索引
传统的方式:
i = 0
for element in mylist:
# Do something with i and element
i += 1
这样更简洁些:
for i, element in enumerate(mylist):
# Do something with i and element
pass
list 排序
在包含某元素的列表中依据某个属性排序是一个很常见的操作。例如这里我们先创建一个包含 person 的 list:
class Person(object):
def __init__(self, age):
self.age = age
persons = [Person(age) for age in (14, 78, 42)]
传统的方式是:
def get_sort_key(element):
return element.age
for element in sorted(persons, key=get_sort_key):
print "Age:", element.age
更加简洁、可读性更好的方法是使用 Python 标准库中的 operator 模块:
from operator import attrgetter
for element in sorted(persons, key=attrgetter('age')):
print "Age:", element.age
attrgetter 方法优先返回读取的属性值作为参数传递给 sorted 方法。operator 模块还包括 itemgetter 和 methodcaller 方法,作用如其字面含义。