我怎么做类似的东西
x = '1 2 3 45 87 65 6 8'
>>> foo(x)
[1,2,3,45,87,65,6,8]
我完全卡住了,如果我按索引来做,那么超过 1 位的数字将被分解。请帮忙。
最简单的解决方案是使用.split()
创建字符串列表:
x = x.split()
或者,您可以将列表推导与.split()方法结合使用:
x = [int(i) for i in x.split()]
您甚至可以使用 mapmap
作为第三种选择:
x = list(map(int, x.split()))
如果您想要整数,这将创建一个list
of 。int
不用担心,因为 python 提供 split() 函数将字符串更改为列表。
x='1 2 3 4 67 8 9'
x.split()
['1', '2', '3', '4', '67', '8']
或者如果你想以整数形式输出,那么你可以使用 map 函数
map(int ,x.split(' '))
[1、2、3、4、67、8]
在字符串的开头或结尾输入空格或在项目之间用多个不均匀的空格分隔,s.split(' ') 也返回空项目:
>>> s=' 1 2 3 4 67 8 9 '
>>> list(s.split(' '))
['', '1', '2', '', '3', '4', '67', '8', '9', '']
我最好避免指定分隔符:
>>> list(s.split())
['1', '2', '3', '4', '67', '8', '9']
如果可选的第二个参数 sep 不存在或为 None,则单词由任意字符串(空格、制表符、换行符、回车符、换页符)分隔。
如果您只想在空格处拆分,可以轻松过滤空字符串:
>>> [item for item in s.split(' ') if item]
['1', '2', '3', '4', '67', '8', '9']
一条简单的线可以...
print (map(int, x.split()))
正如有人明智地纠正我的那样,在 python >=3 中,它会变成,
print(list(map(int,x.split())))
它也可以是早期版本的用户。
只是为了做一个清楚的解释。
您可以使用将字符串str.split()
拆分为列表的字符串方法。您可以在此处了解有关此方法的更多信息。
例子:
def foo(x):
x = x.split() #x is now ['1','2','3','45', ..] the spaces are removed.
for i, v in enumerate(x): #Loop through the list
x[i] = int(v) #convert each element of v to an integer
应该这样做!
>>> x
[1, 2, 3, 45, 87, 65, 6, 8]
假设您的输入中只有数字,您可以有如下内容:
>>> x = '1 2 3 45 87 65 6 8'
>>> num_x = map(int, filter(None, x.split(' ')))
>>> num_x
[1 2 3 45 87 65 6 8]
当数字被多个空格字符分隔或输入的前面或后面有空格字符时,这将处理这种情况。如下所示:
>>> x = ' 1 2 3 4 '
>>> num_x = map(int, filter(None, x.split(' ')))
>>> num_x
[1, 2, 3, 4]
您也可以替换输入以x.split(' ')
匹配其他分隔符类型,例如,
或;
等。
x = '1 2 3 45 87 65 6 8'
new_list = []
for i in x.split(" "):
new_list.append(int(i))
输出:
>>> x
[1, 2, 3, 45, 87, 65, 6, 8]
如果你想从第零个位置创建一个列表:
x = '1 2 3 4 5 6 7'
result = x.split(" ")[0:]
print(result)
结果将是:
['1', '2', '3', '4', '5', '6', '7']