如何将字符串和整数分隔到列表中[关闭]
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 将创建列表列表
append
和 extend
(或 +=
如您所用)如果有机会,应避免使用。这两种操作都会导致 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
。以上是关于如何将字符串和整数分隔到列表中[关闭]的主要内容,如果未能解决你的问题,请参考以下文章