-10

我想要的映射函数的 Ruby 示例:

["qwe", ["asd", "zxc"]].map{ |i| [*i][0] } => ["qwe", "asd"]

def f array_or_string
  [*array_or_string].first
end

["qwe", ["asd", "zxc"]].map &method(:f)    => ["qwe", "asd"]

f ["qwe", "zxc"]                           => "qwe"
f "asd"                                    => "asd"

由于字符串在 Python 中是可迭代的,我如何应对这种语言设计失败而优雅地达到相同的结果?

def f(array_or_string):
    ???
4

2 回答 2

1
def f(something):
    if isinstance(something,basestring): 
         return something
    elif isinstance(something,(list,tuple)):
         return something[0]
    raise Exception("Unknwon Something:%s <%s>"%(something,type(something)))

假设我正确理解你的问题

于 2013-07-23T16:56:10.070 回答
0

我认为您真正追求的是 Ruby 的“如果不是一个则将其包装在一个数组中”运算符的等价物。Python 认为这还不够重要,无法将其构建到语言语法中。您可以很容易地自己定义它:

def tolist(thing):
    return thing if isinstance(thing, list) else [thing]

def first_or_only(thing):
    return tolist(thing)[0]
于 2013-07-23T17:18:18.413 回答