如何从列表中返回第一个字符串,如果传递的是字符串而不是列表,则返回字符串本身?

2024-04-26 22:06:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要的映射函数的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):
    ???

Tags: or字符串编辑示例mapstringdefarray
2条回答
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)))

假设我正确理解你的问题

我认为你真正想要的是Ruby的“如果不是一个数组,就把它包装成一个数组”操作符。Python认为这一点不够重要,无法将其构建到语言语法中。你可以很容易地自己定义它:

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

def first_or_only(thing):
    return tolist(thing)[0]

相关问题 更多 >