【问题标题】:Convert a string to a list of length one将字符串转换为长度为 1 的列表
【发布时间】:2015-07-03 10:47:51
【问题描述】:

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

"I am a string"

我想把它转换成:

["I am a string"]

我可以这样做:

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

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

【问题讨论】:

  • 如果你想使用更简洁的.split(),你可以将maxsplit参数设置为0,这样你就可以保证得到整个字符串:"I am a string".split(' ',0)跨度>
  • 我比以前更喜欢它,而且我很确定这在未来的某个时候会很有用,所以谢谢!

标签: python string list split


【解决方案1】:

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

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

listify("hello")
['hello']

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

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

【讨论】:

  • 虽然类型检查不被认为是“pythonic”,但是当你这样做的时候,最好尽可能的非特定和通用,如this answer所示。
  • 谢谢,这绝对是一个进步。
【解决方案2】:
>>> s = "abc"
>>> if isinstance(s, str): 
...    s = [ s ]
>>> s 
['abc']

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

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

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

【讨论】:

    【解决方案3】:
    >>> "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.
    

    【讨论】:

    • 我认为 OP 是在询问如何接受字符串或字符串列表作为参数
    • @ohruunuruus 好吧,他的头衔是Convert a string to a list of length one,这正是我所介绍的完全。不过,我们可能遇到了 XY 问题。我已经添加了,JIC。
    • 抱歉标题标题不佳;不过,matsjoyce 所做的正确回答了我的问题。我没有意识到你可以把一个字符串放在括号里......谢谢
    • @user2869231 别担心,标题总是最难的。
    【解决方案4】:

    这是一种快速的方法:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多