如何将字符串和整数分隔到列表中[关闭]

Posted

技术标签:

【中文标题】如何将字符串和整数分隔到列表中[关闭]【英文标题】:How to separate string and integers to a list [closed] 【发布时间】:2016-11-09 00:39:13 【问题描述】:

我需要把这个字符串分开:

s = "I have 10 cars"

到这样的列表:

['I','h','a','v','e',10,'c','a','r','s']

数字不应分开。数字也应该作为整数输入(没有这些'')

【问题讨论】:

太棒了!祝你好运!如果遇到困难,请根据您迄今为止尝试和研究的内容提出描述性问题 【参考方案1】:
res = []
for item in s.split(' '):
...     try:
...         int(item)
...         res.append(item)
...     except:
...         res += list(item)

【讨论】:

append+= 对于 list 来说真的很贵,因为您每次都需要调整它的大小 @Brian append 将创建列表列表 appendextend(或 += 如您所用)如果有机会,应避免使用。这两种操作都会导致 Python 必须调整内存中数组的大小,因此效率不高。您的方法有效,但对于较长的字符串,这将是一项昂贵的操作 @Brian 是的。同意你 res = [] for item in input().split(' '): try: res.append(int(item)) except: res += list(item) print(res) 【参考方案2】:

这里的其他答案对于较大的字符串非常低效。

您应该不要不必要地使用append,因为使用较大的字符串可能会非常昂贵。以我的方式,每次在其中找到所需的新元素时,您都不会调整 list 的大小。为了效率,你可以这样做:

s = "I have 10 cars"

def seperateWithInts( l ):
    for s in l.split():
        if s.isdigit():
            yield s
        else:
            for c in s:
                yield c

s2 = [i for i in seperateWithInts(s)]

【讨论】:

【参考方案3】:

这是一个使用列表理解的单行代码,这可能不是您的最佳选择。

s = "I have 10 cars"
print [item for sublist in [[x] if x.isdigit() else list(x) for x in s.split(" ")] for item in sublist]
#Output
['I', 'h', 'a', 'v', 'e', '10', 'c', 'a', 'r', 's']

基本上,您将字符串拆分为包含字符和数字的列表列表,然后将列表展平,一举完成列表理解。

【讨论】:

【参考方案4】:

尝试将其作为字符串返回。

list(str("I have 10 cars"))

【讨论】:

为什么我被否决了? 那行不通。尝试自己运行它 你的答案是错误的。它产生['I','h','a','v','e','1','0','c','a','r','s'],即它也分割数字。此外,不需要使用str

以上是关于如何将字符串和整数分隔到列表中[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将分隔符数组传递给 Regex.Split 函数? [关闭]

将由空格分隔的整数字符串更改为 int 列表

你将如何从字符串列表中创建一个逗号分隔的字符串?

如何在 C++ 中读取由空格分隔的字符串? [关闭]

逗号分隔的文本文件到通用列表

保留字符串中的分隔标记列表[关闭]