Python:将一个字符串的不同部分分隔成一个数组
Python: Separating different parts of a string into an array
我正在尝试将字符串中的值(在逗号之间)分隔到列表中。这是我目前所拥有的:
x = ["1,2,3,4,5,", "6,7,8,9,10,"]
x_new = []
for j_1 in range(len(x)):
y = 0
for j_2 in range(0, len(x[j_1])):
if x[j_1][j_2] == ",":
x_new.append(j_1, (x[j_1][y: j_2]))
y = j_2 + 1
print("x_new[0] = ", x[0])
print("x_new[1] = ", x[1])
我得到的只是错误信息:
Traceback (most recent call last):
File "test.py", line 12, in <module>
x_new.append(j_1, (x[j_1][y: j_2]))
TypeError: append() takes exactly one argument (2 given)
我要代码输出:
- x[0] = ["1", "2", "3", "4", "5"]
- x[1] = ["6", "7", "8", "9", "10"]
x 总是被分成 5 个字符串。
提前致谢!
一个嵌套的条件列表理解可以达到你想要的结果:
x_new = [[i for i in s.split(",") if i] for s in x]
>>> x_new
[['1', '2', '3', '4', '5'], ['6', '7', '8', '9', '10']]
您的代码是错误的,因为您使用的 "append" 不正确。有一个更好的方法,使用 split 函数:
x = ["1,2,3,4,5,", "6,7,8,9,10,"]
x_new = []
for j in range(len(x)):
x_new.append([y for y in x[j].split(',') if len(y)>0])
print("x_new[0] = ", x_new[0])
print("x_new[1] = ", x_new[1])
推理:对列表中的每个元素进行拆分并丢弃空元素(假设你在末尾有一个','。似乎给出了你想要的结果。
剩下的"for"可以换成另一个列表推导:
x = ["1,2,3,4,5,", "6,7,8,9,10,"]
x_new = [[y for y in x[j].split(',') if len(y)>0] for j in range(len(x))]
如果你想保持代码的风格,这是一个固定版本:
x = ["1,2,3,4,5,", "6,7,8,9,10,"]
x_new = []
for j_1 in range(len(x)):
y = 0
x_new_aux = []
for j_2 in range(len(x[j_1])):
if x[j_1][j_2] == ",":
x_new_aux.append(x[j_1][y:j_2])
y = j_2+1
x_new.append(x_new_aux)
print("x_new[0] = ", x_new[0])
print("x_new[1] = ", x_new[1])
注意我使用的是辅助列表。
x = ["1,2,3,4,5,", "6,7,8,9,10,"]
new_list = [x[i].split(',')[:-1] for i in range(len(x))]
>>
new_list = [['1', '2', '3', '4', '5'], ['6', '7', '8', '9', '10']]
让我们看看你的代码有什么问题。
首先,变量名让人很难理解。为什么你有 j_1
和 j_2
而不是 i
和 j
?就此而言,为什么你有 j_1
而不是直接迭代 x
?
但无论如何,这是你的主要问题:
x_new.append(j_1, (x[j_1][y: j_2]))
这个电话没有任何意义。 append
方法只接受一个参数,即要追加到序列末尾的新元素。你传递给它两个参数。此外,您将其附加到 x_new
,这应该是两个列表的列表,而不是适当的子列表。我认为你想要的是:
x_new[j_1].append(x[j_1][y: j_2])
但是,在此之前,您还需要实际创建每个子列表以附加到其中。
然后,最后,Python 猜不出你想要它打印什么;如果你要求它打印字符串 x_new[0]
而不是 x[0]
,或者打印出 x[0]
的内容而不是 x_new[0]
的内容,这就是你要做的得到。
所以:
x = ["1,2,3,4,5,", "6,7,8,9,10,"]
x_new = []
for j_1 in range(len(x)):
x_new.append([])
y = 0
for j_2 in range(0, len(x[j_1])):
if x[j_1][j_2] == ",":
x_new[j_1].append(x[j_1][y: j_2])
y = j_2 + 1
print("x[0] =", x_new[0])
print("x[1] =", x_new[1])
然而,这一切都过于复杂了。 Python 字符串有一个 split
方法。因此,您可以将整个混乱替换为:
x_new = [s.rstrip(',').split(',') for s in x]
print("x[0] =", x_new[0])
print("x[1] =", x_new[1])
rstrip(',')
是为了去掉尾随的逗号,所以你不会在最后得到一个额外的空字符串。您可以改为使用 s.split(',')[:-1]
或其他各种方法来获得相同的效果。
我正在尝试将字符串中的值(在逗号之间)分隔到列表中。这是我目前所拥有的:
x = ["1,2,3,4,5,", "6,7,8,9,10,"]
x_new = []
for j_1 in range(len(x)):
y = 0
for j_2 in range(0, len(x[j_1])):
if x[j_1][j_2] == ",":
x_new.append(j_1, (x[j_1][y: j_2]))
y = j_2 + 1
print("x_new[0] = ", x[0])
print("x_new[1] = ", x[1])
我得到的只是错误信息:
Traceback (most recent call last):
File "test.py", line 12, in <module>
x_new.append(j_1, (x[j_1][y: j_2]))
TypeError: append() takes exactly one argument (2 given)
我要代码输出:
- x[0] = ["1", "2", "3", "4", "5"]
- x[1] = ["6", "7", "8", "9", "10"]
x 总是被分成 5 个字符串。
提前致谢!
一个嵌套的条件列表理解可以达到你想要的结果:
x_new = [[i for i in s.split(",") if i] for s in x]
>>> x_new
[['1', '2', '3', '4', '5'], ['6', '7', '8', '9', '10']]
您的代码是错误的,因为您使用的 "append" 不正确。有一个更好的方法,使用 split 函数:
x = ["1,2,3,4,5,", "6,7,8,9,10,"]
x_new = []
for j in range(len(x)):
x_new.append([y for y in x[j].split(',') if len(y)>0])
print("x_new[0] = ", x_new[0])
print("x_new[1] = ", x_new[1])
推理:对列表中的每个元素进行拆分并丢弃空元素(假设你在末尾有一个','。似乎给出了你想要的结果。
剩下的"for"可以换成另一个列表推导:
x = ["1,2,3,4,5,", "6,7,8,9,10,"]
x_new = [[y for y in x[j].split(',') if len(y)>0] for j in range(len(x))]
如果你想保持代码的风格,这是一个固定版本:
x = ["1,2,3,4,5,", "6,7,8,9,10,"]
x_new = []
for j_1 in range(len(x)):
y = 0
x_new_aux = []
for j_2 in range(len(x[j_1])):
if x[j_1][j_2] == ",":
x_new_aux.append(x[j_1][y:j_2])
y = j_2+1
x_new.append(x_new_aux)
print("x_new[0] = ", x_new[0])
print("x_new[1] = ", x_new[1])
注意我使用的是辅助列表。
x = ["1,2,3,4,5,", "6,7,8,9,10,"]
new_list = [x[i].split(',')[:-1] for i in range(len(x))]
>>
new_list = [['1', '2', '3', '4', '5'], ['6', '7', '8', '9', '10']]
让我们看看你的代码有什么问题。
首先,变量名让人很难理解。为什么你有 j_1
和 j_2
而不是 i
和 j
?就此而言,为什么你有 j_1
而不是直接迭代 x
?
但无论如何,这是你的主要问题:
x_new.append(j_1, (x[j_1][y: j_2]))
这个电话没有任何意义。 append
方法只接受一个参数,即要追加到序列末尾的新元素。你传递给它两个参数。此外,您将其附加到 x_new
,这应该是两个列表的列表,而不是适当的子列表。我认为你想要的是:
x_new[j_1].append(x[j_1][y: j_2])
但是,在此之前,您还需要实际创建每个子列表以附加到其中。
然后,最后,Python 猜不出你想要它打印什么;如果你要求它打印字符串 x_new[0]
而不是 x[0]
,或者打印出 x[0]
的内容而不是 x_new[0]
的内容,这就是你要做的得到。
所以:
x = ["1,2,3,4,5,", "6,7,8,9,10,"]
x_new = []
for j_1 in range(len(x)):
x_new.append([])
y = 0
for j_2 in range(0, len(x[j_1])):
if x[j_1][j_2] == ",":
x_new[j_1].append(x[j_1][y: j_2])
y = j_2 + 1
print("x[0] =", x_new[0])
print("x[1] =", x_new[1])
然而,这一切都过于复杂了。 Python 字符串有一个 split
方法。因此,您可以将整个混乱替换为:
x_new = [s.rstrip(',').split(',') for s in x]
print("x[0] =", x_new[0])
print("x[1] =", x_new[1])
rstrip(',')
是为了去掉尾随的逗号,所以你不会在最后得到一个额外的空字符串。您可以改为使用 s.split(',')[:-1]
或其他各种方法来获得相同的效果。