python对list中的每个元素进行某种操作_Python对list操作的一些小技巧

Python对list操作的一些小技巧

由于要搞数学建模,于是从熟悉已久的C++转战Python。虽然才上手,但是Python的语法糖就让我大呼过瘾。不得不说相比于C/C++,Python对于数据的处理非常方便,仅仅是列表的操作就有许多方便的技巧。现列举如下:

列表推导式

Python可以完成对许多数据结构的宏观操作,比如已知一个列表[1,2,3,4,5],想求得另一个列表。使其每个元素为原列表的两倍,即[2,4,6,8,10]在C/C++语言里,你可能需要遍历原列表所有元素,并将每个元素乘2,依次加入新的列表,而Python具有列表推导式功能,使这个操作异常简单:

list1=[1,2,3,4,5]

list2=[x*2 for x in list1]

print(list2)

#结果是:[2,4,6,8,10]

如果我要筛选原列表里面为奇数的元素,可以如此:

list2=[x for x in list1 if x%2==1]

print(list2)

#结果是[1,3,5]

我们也可以结合函数来使用列表推导式,比如新列表元素为原列表每个元素的平方:

func=lamba x:x**2

list2=[func(x) for x in list1]

print(list2)

#输出是[1,4,9,16,25]

列表推导式也支持布尔值,比如如果我们想判断原列表里面的元素的奇偶性,可以这样:

list2=[x%2==1 for x in list1]

print(list2)

#输出是:[true,false.true,false,true]

map映射结构

不过,对于一些复杂的列表转换,列表推导式就力不从心了,比如我们一直一个人名列表[‘tOm’,‘jacK’,‘RICK’],我们需要把它规范化,即首字母大写,其余字母小写,转化为列表[‘Tom’,‘Jack’,‘Rick’],那么我们怎么做呢?Python提供了map映射结构,让我们可以求得原列表的某种映射列表,比如要处理这个姓名规整问题,我们可以先定义一个规整函数:

def traslation(name):

Name=name[0].upper()+name[1:].lower()

return Name

然后调用map结构,求得map映射,并转换为list结构

names=[‘tOm’,'jacK','RICK']

list2=list(map(traslation,names))

print(list2)

#输出结果为['Tom','Jack','Rick']

注意,map结构的第一个参数是函数名,也可以支持匿名函数,比如这样用:

x=[1,2,3,4,5]

y=list(map(lambda x:x*2,x))

print(y)

#输出结果为:[2,4,6,8,10]

自定义列表排序

Python的列表可以按照你的意愿进行排序,非常方便,格式为×××.sort(key=‘×××’),其中key='×××’中的×××为一个函数(在Python里,函数也是对象),

如果我们想按照字符串长度对一个字符串集进行排序:

b=['saw','small','He','foxes','six']

b.sort(key=len)

print(b)

#输出结果:['He','saw','six','small','foxes']

如果要求稍微复杂一些,我们可以运用匿名函数,比如我们想字符串中不同字母的数量对一个字符串集进行排序:

strings=['foo','card','bar','aaaa'.'abab']

srtings.sort(key=lamba x:len(set(list(x))))

print(strings)

#输出结果:['aaaa','foo','abab','bar','card']

元组构成的列表

在数学建模的过程中,我经常会把一些点坐标的x,y坐标值用不同的列表分开储存,但有时我们有需要把他们合并成一个元素为元素的列表,比如x坐标列表[1,2,3],y坐标列表[4,5,6],我们想得到[(1,4),(2,5),(3,6)],可以这样做:

x=[1,2,3]

y=[4,5,6]

points=zip(x,y)

print(list(points))

#输出结果为:[(1,4),(2,5),(3,6)]

不过拆分的方式略显魔幻

points=[(1,4),(2,5),(3,6)]

x,y=zip(*points)

print(x)

print(y)

#输出为:[1,2,3]

[4,5,6]

好了,我的Python学习分享就在这里,如果在我的学习过程中还发现一些有用的技巧,我还会继续分享的O(∩_∩)O~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值