我在python中工作,试图能够放入一个返回字符串的数据集(例如(1、6、8)(例如“NO+F-NO+”)。我认为数组可能不是正确的对象。我希望能够插入大数据集(例如(1,1,6,1,…,8,8,6,1)以返回字符串
def protein(array):
ligand = ''
for i in range(array):
if i == 1:
ligand = ligand + 'NO+'
if i == 6:
ligand = ligand + 'F-'
if i == 8:
ligand = ligand + 'NO+'
return ligand
以下是输入和错误代码:
protein(1, 6, 8)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-44-a33f3d5c265e> in <module>()
----> 1 protein(1, 6, 8)
TypeError: protein() takes 1 positional argument but 3 were given
对于单输入,我得到了错误的输出:
protein(1)
Out[45]: ''
protein(6)
Out[46]: 'NO+'
如果需要进一步澄清,请告诉我,谢谢
您可能希望
def protein(*array):
这允许您提供任意数量的参数。您还必须使用for i in array:
而不是for i in range(array):
首先,需要
*args
作为参数,以接受任意数量的参数,如示例中所示一旦你这么做了,你只需在
args
上迭代。如果不是完全惯用的话,其余的代码也可以一个更好的解决方案是建立一个从整数到离子(?)的映射,然后映射和连接
为不存在的索引返回空字符串实际上与不附加到结果相同
如果你像
protein(1, 6, 8)
那样调用它,你不是在传递元组:你传递了三个参数。由于您使用一个参数array
定义了protein
,因此会出现错误通过使用
*args
,您可以使用任意参数。但是这个函数仍然不是很优雅,也不是很有效:它需要O(n2)来计算字符串一种更具声明性和效率的方法可能是使用字典并执行查找,然后将这些查找结合在一起:
如果要忽略传递的不在字典中的值(例如忽略
protein(1,7,6,8)
中的7
),可以用.get(x, '')
替换[x]
:相关问题 更多 >
编程相关推荐