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
类型的祖先。