当合适时,Python中应使用extend或append扩展列表

8

如果X是一个字符串,是否有一种简单的方法来追加列表,但如果X是一个列表,则将其扩展?我知道可以简单地测试对象是字符串还是列表,但我想知道是否有比这更快的方法?


3
最快最简单的方法是编写不会迫使你以后这样做的代码。 - user395760
在这种特殊情况下是不可能的,我从后端系统继承了X,并且它不会将单个对象作为列表项传递。 - chrism
1
它不会将单个对象作为列表传递。很遗憾。你不能用一个合理的函数包装它,也不能通过扩展额外的方法或子类来修复它吗? - S.Lott
3个回答

11

mylist.extend( [x] if type(x) == str else x )

mylist.extend( x if type(x) == list else [x] )

这段代码的意思是,将变量x加入到列表mylist中。如果x的类型是字符串,则将其封装在列表中添加;否则直接添加。第二个示例与之相似,只不过是将条件反转,如果x是列表,则直接添加;否则将其封装在列表中再添加。

1
我忘记了isinstance(),它可能比type()更灵活。 - kurosch
使用了第二个,效果很好,比使用if语句稍微快一些 - 感谢。 - chrism

0
buffer = ["str", [1, 2, 3], 4]
myList = []

for x in buffer:
    if isinstance(x, str):
        myList.append(x)
    elif isinstance(x, list):
        myList.extend(x)
    else:
        print("{} is neither string nor list".format(x))

更好的方法是使用try-except而不是isinstance()

0

我不这么认为。extend可以接受任何可迭代对象作为输入,而在Python中字符串和列表都是可迭代对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接