list操作

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]      
1
[2, 18, 16, 8]
>>> li                           
2
[1, 9, 8, 4]
>>> li = [elem*2 for elem in li] 
3
>>> li
[2, 18, 16, 8]

1
为了便于理解它,让我们从右向左看。li 是一个将要映射的 list。Python 循环遍历li 中的每个元素。对每个元素均执行如下操作:首先临时将其值赋给变量 elem,然后 Python 应用函数elem*2 进行计算,最后将计算结果追加到要返回的 list 中。
2
需要注意是,对 list 的解析并不改变原始的 list。
3
将一个 list 的解析结果赋值给对其映射的变量是安全的。不用担心存在竞争情况或任何古怪事情的发生。Python 会在内存中创建新的 list,当对 list 的解析完成时,Python 将结果赋给变量。


您有了一个形如 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[:],例如:

  1. >>> l1=["hello","world"]  
  2. >>> l2=l1[:]  
  3. >>> print l1  
  4. ['hello''world']  
  5. >>> print l2  
  6. ['hello''world']  
  7. >>> l1[0]="world"  
  8. >>> print l1  
  9. ['world''world']  
  10. >>> print l2  
  11. ['hello''world']




更多 0

判断一个 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 方法,作用如其字面含义。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值