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