Python:通过字符串列表递归-如何区分差异?

Python:通过字符串列表递归-如何区分差异?,python,string,list,types,enumerable,Python,String,List,Types,Enumerable,我有以下代码 def printmylist( mylist ): """ print tree """ try: for f in mylist: printmylist( f ) except: print( " " + mylist ) 希望获得如下产出: root branch leaf leaf 但由于字符串是可枚举的,我得到 r o o t . . 检查类型似

我有以下代码

def printmylist( mylist ):
    """
    print tree
    """
    try:
    for f in mylist:
        printmylist( f )
    except:
        print( "        " + mylist )
希望获得如下产出:

root
   branch
     leaf
     leaf
但由于字符串是可枚举的,我得到

r
o
o
t
.
.

检查类型似乎是非音速的,那么蟒蛇是如何做到这一点的呢?

我所知道的最干净的方法是使用(不要与之混淆):

或者:

isinstance(var, basestring)

该模块的文档表明,后者是Python 2.x最新版本中的首选方式。

据我所知,最干净的方式是使用(不要与之混淆):

或者:

isinstance(var, basestring)

模块的文档表明,后者是Python 2.x最新版本中的首选方法。

最简单的方法是
如果type(f)=str

有时使用if比使用异常要好

编辑:
由于拉斯曼的评论,我不推荐这个选项。它在简单使用中很有用,但在专业编码中最好使用
isinstance

最简单的是
如果type(f)==str

有时使用if比使用异常要好

编辑:
由于拉斯曼的评论,我不推荐这个选项。它在简单使用中很有用,但在专业编码中,最好使用
isinstance

我使用以下pythonic方法来解决这个问题。不需要调用isinstance()。因此,它甚至可以用我用Python包装的各种自定义C++类来工作。我认为那些基于isinstance()的方法在这些情况下不起作用。此外,OP明确要求提供不涉及类型检查的解决方案。Pythonistas检查行为,而不是类型

这里的技巧包括观察字符串有一个不寻常的特性:一个字符串的第一个元素是同一个字符串

"f"[0] == "f"
这在python 2.x中适用:

def is_string(s):
    try:
        if (s[0] == s[0][0]):
            return True
    except:
        pass
    return False

我使用下面的pythonic方法来解决这个问题。不需要调用isinstance()。因此,它甚至可以用我用Python包装的各种自定义C++类来工作。我认为那些基于isinstance()的方法在这些情况下不起作用。此外,OP明确要求提供不涉及类型检查的解决方案。Pythonistas检查行为,而不是类型

这里的技巧包括观察字符串有一个不寻常的特性:一个字符串的第一个元素是同一个字符串

"f"[0] == "f"
这在python 2.x中适用:

def is_string(s):
    try:
        if (s[0] == s[0][0]):
            return True
    except:
        pass
    return False

... 也是最不可靠的<代码>isinstance(f,str)会更好。我没有遇到过类型()不可靠的情况,但也许我只是幸运而已。如果你这么说,那么肯定
isinstance
是一个更好的解决方案。我留下了答案,只是为了让每个人都能看到不同。。。。也是最不可靠的<代码>isinstance(f,str)会更好。我没有遇到过类型()不可靠的情况,但也许我只是幸运而已。如果你这么说,那么肯定
isinstance
是一个更好的解决方案。不过,我留下答案,只是让任何人都能看到区别。蟒蛇学家会先抱怨“扁平比嵌套好”,然后承认“实用性比纯洁性强”,然后再进行手动打字检查。蟒蛇学家会先抱怨“扁平比嵌套好”,然后承认“实用性比纯洁性强”Python3.x用户只需使用:
isinstance(var,str)
(Python3中的每个字符串都是unicode,unicode类型消失了)在2.x中,使用
基串
更容易,python 3.x用户只需使用:
isinstance(var,str)
(python 3中的每个字符串都是unicode,unicode类型消失了)在2.x中,使用
basestring
更容易,它是
str
unicode
类型的祖先。