在python中使字符串表现得像一个项目的列表

时间:2015-03-24 09:23:05

标签: python string list

我有一个验证函数,它根据允许值的控制列表检查从另一个函数返回的列表的成员。除了返回的列表包含单个字符串的情况外,这种方法很好。 Python然后将该字符串解释为字符列表。我是否可以将其处理为好像只有一个项目的列表?这是功能:

def validate(returned_list, control_list):
    for y in range(len(returned_list)):
       tf = False
       for x in range(len(control_list)):
           if returned_list[y] == control_list[x]:
               tf = True
               break
       if tf == False:
           return returned_list[y]
    return "OK"

3 个答案:

答案 0 :(得分:1)

您需要在此处检查类型。像这样:

 def polymorphic(arg):
     if isinstance(arg, basestring):
         arg = [arg]
     for item in arg:
         print item

这是恕我直言,你应该像这样执行检查的少数几个例子之一。通常情况下,出于好的理由不鼓励这样做,因为你最终将强大的Python武装到了它不是的东西 - 一种静态类型的语言。但是,字符串的迭代行为使它偶尔变得必要。

答案 1 :(得分:1)

你可以试试这个:

def validate(returned_list, control_list):
    returned_list = returned_list if isinstance(returned_list, list) else [returned_list]
    for y in range(len(returned_list)):
       tf = False
       for x in range(len(control_list)):
           if returned_list[y] == control_list[x]:
               tf = True
               break
       if tf == False:
           return returned_list[y]
    return "OK"

答案 2 :(得分:0)

根据所有评论,这是修订后的功能:

def validate(returned_list, control_list):
    if isinstance(returned_list, basestring):
        returned_list = [returned_list]
    for x in returned_list:
        for y in control_list:
            if x == y:
                break:
        else:
            return x
    return None