Python列出方法和支持的运算符
示例
从给定列表开始a:
a = [1, 2, 3, 4, 5]
append(value)–将新元素追加到列表的末尾。
#将值6、7和7追加到列表中
a.append(6)
a.append(7)
a.append(7)
#a:[1、2、3、4、5、6、7、7]
#追加另一个清单
b=[8,9]
a.append(b)
#a:[1、2、3、4、5、6、7、7,[8、9]]
#追加其他类型的元素,因为列表元素不需要具有相同的类型
my_string="helloworld"
a.append(my_string)
#a:[1,2,3,4,5,6,7,7,[8,9],"helloworld"]
请注意,该append()方法仅将一个新元素附加到列表的末尾。如果将列表追加到另一个列表,则追加的列表将成为第一个列表末尾的单个元素。
#将列表追加到另一个列表
a=[1,2,3,4,5,6,7,7]
b=[8,9]
a.append(b)
#a:[1、2、3、4、5、6、7、7,[8、9]]
a[8]
#返回:[8,9]
extend(enumerable)–通过附加另一个可枚举的元素来扩展列表。
a=[1,2,3,4,5,6,7,7]
b=[8,9,10]
#通过附加b中的所有元素来扩展列表
a.extend(b)
#a:[1、2、3、4、5、6、7、7、8、9、10]
#用非列表可枚举的元素扩展列表:
a.extend(range(3))
#a:[1、2、3、4、5、6、7、7、8、9、10、0、1、2]
列表也可以与+运算符连接在一起。请注意,这不会修改任何原始列表:
a=[1,2,3,4,5,6]+[7,7]+b
#a:[1、2、3、4、5、6、7、7、8、9、10]
index(value,[startIndex])–获取输入值首次出现的索引。如果输入值不在列表中,ValueError则会引发异常。如果提供了第二个参数,则从该指定的索引开始搜索。
a.index(7)
#返回:6
a.index(49)#ValueError,因为a中没有49。
a.index(7,7)
#返回:7
a.index(7,8)#ValueError,因为从索引8开始没有7
insert(index,value)–value在指定的之前插入index。因此,在插入之后,新元素将占据位置index。
a.insert(0,0) #在位置0插入0
a.insert(2,5) #在位置2插入5
#a:[0、1、5、2、3、4、5、6、7、7、8、9、10]
pop([index])–删除并返回项目index。如果不带参数,它将删除并返回列表的最后一个元素。
a.pop(2)
#返回:5
#a:[0、1、2、3、4、5、6、7、7、8、9、10]
a.pop(8)
#返回:7
#a:[0、1、2、3、4、5、6、7、8、9、10]
#不带参数:
a.pop()
#返回:10
#a:[0、1、2、3、4、5、6、7、8、9]
remove(value)–删除第一次出现的指定值。如果找不到提供的值,ValueError则引发a。
a.remove(0)
a.remove(9)
#a:[1、2、3、4、5、6、7、8]
a.remove(10)
#ValueError,因为10不在
reverse()–就地反转列表并返回None。
a.reverse()
#a:[8、7、6、5、4、3、2、1]
还有其他方法可以反转列表。
count(value)–计算列表中某个值的出现次数。
a.count(7)
#返回:2
sort()–按数字和字典顺序对列表进行排序并返回None。
a.sort()
#a=[1、2、3、4、5、6、7、8]
#按数字顺序对列表进行排序
使用方法中的reverse=True标志进行排序时,列表也可以反向sort()。
a.sort(reverse=True)
#a=[8、7、6、5、4、3、2、1]
如果要按项目的属性排序,可以使用key关键字参数:
importdatetime
classPerson(object):
def__init__(self,name,birthday,height):
self.name=name
self.birthday=birthday
self.height=height
def__repr__(self):
returnself.name
l=[Person("JohnCena",datetime.date(1992,9,12),175),
Person("ChuckNorris",datetime.date(1990,8,28),180),
Person("JonSkeet",datetime.date(1991,7,6),185)]
l.sort(key=lambdaitem:item.name)
#l:[查克·诺里斯,约翰·塞纳,乔恩·斯基特]
l.sort(key=lambdaitem:item.birthday)
#l:[ChuckNorris,JonSkeet,JohnCena]
l.sort(key=lambdaitem:item.height)
#l:[约翰·塞纳,查克·诺里斯,乔恩·斯基特]
在命令列表的情况下,概念是相同的:
importdatetime
l=[{'name':'JohnCena','birthday':datetime.date(1992,9,12),'height':175},
{'name':'ChuckNorris','birthday':datetime.date(1990,8,28),'height':180},
{'name':'JonSkeet','birthday':datetime.date(1991,7,6),'height':185}]
l.sort(key=lambdaitem:item['name'])
#l:[查克·诺里斯,约翰·塞纳,乔恩·斯基特]
l.sort(key=lambdaitem:item['birthday'])
#l:[ChuckNorris,JonSkeet,JohnCena]
l.sort(key=lambdaitem:item['height'])
#l:[约翰·塞纳,查克·诺里斯,乔恩·斯基特]
按主题排序:
importdatetime
l=[{'name':'JohnCena','birthday':datetime.date(1992,9,12),'size':{'height':175,'weight':100}},
{'name':'ChuckNorris','birthday':datetime.date(1990,8,28),'size':{'height':180,'weight':90}},
{'name':'JonSkeet','birthday':datetime.date(1991,7,6),'size':{'height':185,'weight':110}}]
l.sort(key=lambdaitem:item['size']['height'])
#l:[约翰·塞纳,查克·诺里斯,乔恩·斯基特]
使用attrgetter和排序的更好方法itemgetter
也可以使用运算符模块中的attrgetter和itemgetter功能对列表进行排序。这些可以帮助提高可读性和可重用性。这里有些例子,
from operator import itemgetter,attrgetter people = [{'name':'chandan','age':20,'salary':2000}, {'name':'chetan','age':18,'salary':5000}, {'name':'guru','age':30,'salary':3000}] by_age = itemgetter('age') by_salary = itemgetter('salary') people.sort(key=by_age) #按年龄就地分类 people.sort(key=by_salary) #按薪水就地分类
itemgetter也可以给一个索引。如果要基于元组的索引进行排序,这将很有帮助。
list_of_tuples = [(1,2), (3,4), (5,0)] list_of_tuples.sort(key=itemgetter(1)) print(list_of_tuples) #[(5,0),(1、2),(3、4)]
attrgetter如果要按对象的属性排序,请使用,
persons = [Person("John Cena", datetime.date(1992, 9, 12), 175), Person("Chuck Norris", datetime.date(1990, 8, 28), 180), Person("Jon Skeet", datetime.date(1991, 7, 6), 185)] #重用上面示例中的Person类 person.sort(key=attrgetter('name')) #按名称分类 by_birthday = attrgetter('birthday') person.sort(key=by_birthday) #按生日排序
clear()–从列表中删除所有项目
a.clear()
#a=[]
复制–将现有列表乘以整数将产生一个较大的列表,其中包含原始副本的多个副本。例如,这对于列表初始化很有用:
b=["blah"]*3
#b=["blah","blah","blah"]
b=[1,3,5]*5
#[1、3、5、1、3、5、1、3、5、1、3、5、1、3、5]
如果您的列表包含对对象的引用(例如,列表列表),请务必小心,请参阅常见陷阱-列表乘法和常见引用。
元素删除–可以使用del关键字和切片符号删除列表中的多个元素:
a=list(range(10))
dela[::2]
#a=[1、3、5、7、9]
dela[-1]
#a=[1、3、5、7]
dela[:]
#a=[]
复制中
默认分配“=”将原始列表的引用分配给新名称。也就是说,原始名称和新名称都指向同一列表对象。通过它们中的任何一个所做的更改将反映在另一个中。这通常不是您想要的。
b=a
a.append(6)
#b:[1、2、3、4、5、6]
如果要创建列表的副本,则可以使用以下选项。
您可以将其切片:
new_list=old_list[:]
您可以使用内置list()函数:
new_list=list(old_list)
您可以使用generic:copy.copy()
importcopy
new_list=copy.copy(old_list)#插入对原始文档中找到的对象的引用。
这比要慢一些,list()因为它必须先找出old_list的数据类型。
如果列表包含对象,并且您也想复制它们,请使用generic:copy.deepcopy()
importcopy
new_list=copy.deepcopy(old_list)#插入原始文档中找到的对象的副本。
显然,这是最慢且最需要内存的方法,但有时是不可避免的。
copy()–返回列表的浅表副本
aa = a.copy() #aa=[1、2、3、4、5]