将字符串转换为长度为 1 的列表

Convert a string to a list of length one

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

"I am a string"

我想将其转换为:

["I am a string"]

我可以这样做:

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

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

>>> "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.

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

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

listify("hello")
['hello']

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

这不必作为一个单独的函数出现,我只是将它放在一个函数中以便快速说明。你也可以直接赋值给一个变量而不是返回。

这是一种快速方法:

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

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

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

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

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

您还可以使用三元运算符(自 Python 2.5 起引入)编写单行代码:

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