2015-04-24 38 views
2

我创建了一个需要列表才能正常工作的方法。但是,您可以发送一个列表或一个简单的字符串。我想将该字符串转换为一个列表,其中包含整个字符串作为元素。举例来说,如果我有:将字符串转换为长度为1的列表

"I am a string" 

我想将其转换成:

["I am a string"] 

我能做到这一点,像这样:

"I am a string".split("[email protected]#$%^&*") 

因为我永远不会有它将总是将其转换为列表而不删除任何字符。但是,这看起来并不是一种很好的方法。有另一种方法吗?

+0

如果你想使用的'.split()',你可以设置一个清洁的版本' maxsplit'参数设置为'0',这样你就可以保证返回整个字符串:''我是一个字符串“。split('',0)' –

+1

我比我所做的要好得多,而且我很肯定这会在将来有用,所以谢谢! – user2869231

回答

8
>>> "abc" 
'abc' 
>>> ["abc"] 
['abc'] 
>>> abc = "abc" 
>>> abc 
'abc' 
>>> [abc] 
['abc'] 
>>> "I am a string".split("[email protected]#$%^&*") == ["I am a string"] 
True 

将值放在方括号中会使用一个项目列表,就像多个值使多个项目列表一样。不遵循此模式的唯一容器是元组,因为圆括号也用于分组。在这种情况下,只需添加一个逗号的单个项目后:

>>> abc 
'abc' 
>>> (abc) 
'abc' 
>>> (abc,) 
('abc',) 

如果你希望你的函数的掩护下,进行不同的处理列表和字符串,代码的功能,如:

def f(maybe_list): 
    if not isinstance(maybe_list, list): 
     maybe_list = [maybe_list] 
    # carry on, you have a list. 
+1

我想OP是问如何接受一个字符串或一个字符串列表作为参数 – ohruunuruus

+0

@ohruunuruus嗯,他的标题是“将一个字符串转换为一个长度列表”,这是我已经覆盖的_exactly_。尽管我们可能会遇到一个XY问题。我补充说,JIC。 – matsjoyce

+0

对不起的标题标题感到抱歉;尽管matsjoyce做了正确的回答我的问题。我没有意识到你可以在括号内放一个字符串......谢谢 – user2869231

2

如果”试图接受一个字符串作为函数输入的字符串列表,但是接下来想要确保您始终在代码的后续部分中使用列表,可以检查参数的类型并在必要时进行转换:

def listify(arg): 
    return input if isinstance(arg, list) else [input] 

listify("hello") 
['hello'] 

listify(["hi", "howdy"]) 
['hi', 'howdy'] 

这不必作为一个单独的函数发生,我只是把它放在函数中来快速说明。您也可以直接分配给变量而不是返回。

2

这里有一个快速的方法:

#!python 
myString = 'some string' 
myList = list() 
myList.append(myString) 

...注意.append()将单个项目清单,同时.extend()增加项目列表的顺序。

你遇到的问题是Python字符串也是一个字符序列(因此是一个“可迭代的”)。所以像这样:list(myString)对待myString像它会对待任何其他迭代。 (从概念上讲,这是通过实例化一个空列表,迭代初始化内容并将每个附加到新实例化的列表完成的)。

2
>>> s = "abc" 
>>> if isinstance(s, str): 
... s = [ s ] 
>>> s 
['abc'] 

正如前面提出的,你可以使这个检查单独的函数。

你也可以写使用三元运算符一个班轮(因为Python 2.5中引入):

s = s if isinstance(s, list) else [ s ]