在没有numpy(python)的列表上进行元素操作的正确样式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在没有numpy(python)的列表上进行元素操作的正确样式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1869字,纯文字阅读大概需要3分钟。
内容图文
![在没有numpy(python)的列表上进行元素操作的正确样式](/upload/InfoBanner/zyjiaocheng/760/693d9e99058943e289cf6d461e62dba0.jpg)
我想在不使用numpy的情况下逐个元素地操作列表,例如,我想添加([1,2,3],[2,3,4])= [3,5,7]和mult([1 ,1,1],[9,9,9])= [9,9,9],但我不确定哪种方式是被认为是’正确’的风格.
我提出的两个解决方案是
def add(list1,list2):
list3 = []
for x in xrange(0,len(list1)):
list3.append(list1[x]+list2[x])
return list3
def mult(list1, list2):
list3 = []
for x in xrange(0,len(list1)):
list3.append(list1[x]*list2[x])
return list3
def div(list1, list2):
list3 = []
for x in xrange(0,len(list1)):
list3.append(list1[x]/list2[x])
return list3
def sub(list1, list2):
list3 = []
for x in xrange(0,len(list1)):
list3.append(list1[x]-list2[x])
return list3
每个运算符都有一个单独的功能
和
def add(a,b)
return a+b
def mult(a,b)
return a*b
def div(a,b)
return a/b
def sub(a,b)
return a-b
def elementwiseoperation(list1, list2, function):
list3 = []
for x in xrange(0,len(list1)):
list3.append(function(list1[x],list2[x]))
return list3
其中定义了所有基本函数,并且我有一个单独的函数可以在每个元素上使用它们.我浏览了PEP8,但没有发现任何直接相关的内容.哪种方式更好?
解决方法:
执行此操作的常规方法是使用map或itertools.imap:
import operator
multiadd = lambda a,b: map(operator.add, a,b)
print multiadd([1,2,3], [2,3,4]) #=> [3, 5, 7]
Ideone:http://ideone.com/yRLHxW
map是元素操作的c实现版本,具有标准名称的优点,可以处理任何可迭代类型并且速度更快(在某些版本上;请参阅@ nathan的回答以进行一些分析).
或者,您可以使用partial和map来获得令人愉悦的无点样式:
import operator
import functools
multiadd = functools.partial(map, operator.add)
print multiadd([1,2,3], [2,3,4]) #=> [3, 5, 7]
Ideone:http://ideone.com/BUhRCW
无论如何,你已经完成了函数式编程的第一步.我建议你阅读这个主题.
作为样式的一般问题,如果要访问每个项目,通常使用范围迭代迭代通常被认为是错误的.通常的做法是直接迭代结构.使用zip或itertools.izip并行迭代:
for x in l:
print l
for a,b in zip(l,k):
print a+b
迭代创建列表的常用方法是不使用append,而是使用列表解析:
[a+b for a,b in itertools.izip(l,k)]
内容总结
以上是互联网集市为您收集整理的在没有numpy(python)的列表上进行元素操作的正确样式全部内容,希望文章能够帮你解决在没有numpy(python)的列表上进行元素操作的正确样式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。