迭代可能不是列表的列表的正确方法

时间:2018-06-01 06:35:21

标签: python python-3.x list iteration

目前我从xml文件中获取信息。 如果xml标记包含多个子标记,则它将作为该标记内的列表返回,但是如果该xml标记只有1个子标记,则它将不作为列表返回,而仅作为常规字符串返回。

我的问题是:有没有更好的方法来迭代这个标签?如果它是一个列表,遍历列表长度的次数,但如果它是一个字符串只迭代一次?

这是我目前的做法:

 #check if tag is a list, if not then make a list with empty slot at end
 if not isinstance(accents['ac'], list):
      accents['ac'] = list((accents['ac'], {}))

 #loop through guaranteed list
 for ac in accents['ac']: #this line throws error if not list object!

      #if the empty slot added is encountered at end, break out of loop
      if bool(ac) == False:
            break

有关如何使这种更干净或更专业的任何想法都表示赞赏。

3 个答案:

答案 0 :(得分:1)

假设问题是由accents['ac']是字符串列表或单个字符串引起的,那么简单的处理可能是:

 #check if tag is a list, if not then make a list with empty slot at end
 if not isinstance(accents['ac'], list):
      accents['ac'] = [ accents['ac'] ]

 #loop through guaranteed list
 for ac in accents['ac']: #this line throws error if not list object!
     ...

答案 1 :(得分:0)

为了便于阅读,最好做

if isinstance(accents['ac'], str):
    pass #insert what you want to happen here when it is a string
else:
    for(ac in accents['ac']):
        pass #insert what you want to happen here when it is a list

答案 2 :(得分:0)

假设我想将它们添加到列表中,我会首先检查它是否是嵌套标记然后添加它们。

 tag_list=[]    
 if(len(accents['ac'])>1):
   for tag in accents['ac']:
       tag_list.append(tag)
 else:
   tag_list.append(tag)