将字符串转换为长度为

时间:2015-04-24 17:44:05

标签: python string list split

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

"I am a string"

我想将其转换为:

["I am a string"]

我能够这样做:

"I am a string".split("!@#$%^&*")

因为我永远不会有这种符号组合,所以它总会将它转换为列表而不删除任何字符。但是,这似乎不是一种很好的方法。还有另一种方式吗?

4 个答案:

答案 0 :(得分:8)

>>> "abc"
'abc'
>>> ["abc"]
['abc']
>>> abc = "abc"
>>> abc
'abc'
>>> [abc]
['abc']
>>> "I am a string".split("!@#$%^&*") == ["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 :(得分:2)

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

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

listify("hello")
['hello']

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

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

答案 2 :(得分:2)

这是一个快速的方法:

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

...请注意,.append()会将单个项目添加到列表中,而.extend()会将一系列项目添加到列表中。

您遇到的问题是Python字符串也是一系列字符(因此是#34;可迭代的#34;)。所以类似于:list(myString)对待myString就像处理任何其他可迭代一样。 (从概念上讲,通过实例化一个空列表,迭代初始化内容并将每个内容附加到新实例化的列表来完成。)

答案 3 :(得分:2)

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

如前所述,您可以将此检查作为单独的功能。

你也可以使用三元运算符编写一个单行程序(自Python 2.5起引入):

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