2016-11-01 65 views
-2

对不起,这已被无疑地问过,但我似乎无法找到它。我想从python列表中返回一个列表,但是当我尝试这样做时,它似乎将列表作为字符串返回,因此将始终访问第一个if语句。返回列表里面的列表 - Python

def multpoly(entryList): 

    x = entryList.index(0) 

    if type(x) is list: 
     print("list") 

    if type(x) is str: 
     combined_str = ""  

     for x in entryList: 
      combined_str += x 

     return combined_str 

print(multpoly(["1", "2", "3"])) 
+1

你问为什么字符串“1,2,3”是一个字符串?那将是因为它是一个字符串。 – TigerhawkT3

+1

避免使用列表作为变量名称;它也是Pÿthon中内置函数的名称。 –

+0

请提供预期的输出。 – trincot

回答

0
def multipoly(l): #l not list 
    x = l[0] 
    if isinstance(x, str): 
     return ''.join(l) 
    elif isinstance(x, list): 
     return [a for sublist in l for a in sublist] 
    else: 
     raise ValueError("Not a list of strings or list of lists") 

使用isinstance检查类型。不要使用已有含义的名称,如list

+0

谢谢!这工作完美,我应该已经意识到调用列表'列表'这个愚蠢的错误的问题。然而,我刚开始使用python,并且我被教导使用'if type(x)'来检查类型,但是这解决了问题,所以我将开始使用它。 – fdbdcbc

+0

@ MGordon0405'isinstance'和'type'唯一的区别就是它们在继承方面的行为。如果我要写一个扩展列表的类(也就是增加了新的特性)'type(specialList)is list'将会失败,但是'isinstance(specialList,list)'会通过 –

+0

感谢您的信息。 – fdbdcbc