Python:将字符串的不同部分分离为数组

Python:将字符串的不同部分分离为数组,python,list,typeerror,Python,List,Typeerror,我试图将字符串中逗号之间的值分隔成一个列表。这就是我到目前为止所做的: 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]))

我试图将字符串中逗号之间的值分隔成一个列表。这就是我到目前为止所做的:

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']]

嵌套条件列表理解可以实现您想要的结果:

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])
推理:对列表中的每个元素进行拆分,并丢弃空元素,假设最后有一个“,”。似乎给出了你想要的结果

其余的可替换为另一个列表:

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])

请注意,我使用的是辅助列表。

您的代码错误,因为您使用的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])
推理:对列表中的每个元素进行拆分,并丢弃空元素,假设最后有一个“,”。似乎给出了你想要的结果

其余的可替换为另一个列表:

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] 新的_列表=[x[i]。拆分','[:-1]用于rangelenx中的i] >> 新列表=['1','2','3','4','5',['6','7','8','9','10']] x=[1,2,3,4,5,6,7,8,9,10,] 新的_列表=[x[i]。拆分','[:-1]用于rangelenx中的i] >> 新列表=['1','2','3','4','5',['6','7','8','9','10']]
让我们看看你的代码有什么问题

首先,变量名很难理解。为什么只有j_1和j_2而不是i和j?就这一点而言,为什么有ju 1而不是直接在x上迭代呢

但无论如何,你的主要问题是:

x_new.append(j_1, (x[j_1][y: j_2]))
这个电话没有任何意义。该方法只接受一个参数,即要附加到序列末尾的新元素。你在传递两个参数。另外,您要将它附加到x_new,它应该是一个包含两个列表的列表,而不是相应的子列表中。我想你想要的是:

x_new[j_1].append(x[j_1][y: j_2])
但是,在此之前,您还需要实际创建要附加到的每个子列表

最后,Python无法猜测您希望它打印出什么;如果您要求它打印字符串x_new[0]而不是x[0],或者打印出x[0]的内容而不是x_new[0]的内容,您将得到这样的结果

因此:

然而,这一切都过于复杂化了。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]或其他各种方法来获得相同的效果。

让我们看看您的代码有什么问题

首先,变量名很难理解。为什么只有j_1和j_2而不是i和j?就这一点而言,为什么有ju 1而不是直接在x上迭代呢

但无论如何,你的主要问题是:

x_new.append(j_1, (x[j_1][y: j_2]))
这个电话没有任何意义。该方法只接受一个参数,即要附加到序列末尾的新元素。你在传递两个参数。另外,您要将它附加到x_new,它应该是一个包含两个列表的列表,而不是相应的子列表中。我想你想要的是:

x_new[j_1].append(x[j_1][y: j_2])
但是,在此之前,您还需要实际创建要附加到的每个子列表

最后,Python无法猜测您希望它打印出什么;如果您要求它打印字符串x_new[0]而不是x[0],或者打印出x[0]的内容而不是x_new[0]的内容,您将得到这样的结果

因此:

然而,这一切都过于复杂化了。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_new[0]=,时,它不可能输出x[0]=任何内容…。如果你打印原始的x个成员而不是x_个新成员,你将得到你从未更改过的原始值。但与此同时,append错误的意思正是它所说的。我不明白你想传递什么价值观。如果要附加索引和字符串,可以附加一个包含这两个成员的元组。但你似乎不想这样。索引到底在那里做什么;?最后,你为什么一开始就试图重新发明轮子?Python附带了一个分裂的meth
od:x_new=[s.split','for s in x]。@abarnert:s.strip','.split',对于此特定场景,否则您将获得额外的;否则我完全同意。除了明显的分歧,请阅读错误。append只接受给定的一个参数2,它告诉您调用的函数的参数数量不正确。这应该告诉您阅读函数的文档,看看为什么您假设的是错误的。这也应该告诉你如何使用这个函数,以及如何解决这个错误。首先,当你打印x_new[0]=,它不可能输出x[0]=任何东西…。如果你打印原始的x个成员而不是x_个新成员,你将得到你从未更改过的原始值。但与此同时,append错误的意思正是它所说的。我不明白你想传递什么价值观。如果要附加索引和字符串,可以附加一个包含这两个成员的元组。但你似乎不想这样。索引到底在那里做什么;?最后,你为什么一开始就试图重新发明轮子?Python附带了一个split方法:x_new=[s.split','for s in x]。@abarnert:s.strip','.split',对于这个特定场景,否则您将得到一个额外的;否则我完全同意。除了明显的分歧,请阅读错误。append只接受给定的一个参数2,它告诉您调用的函数的参数数量不正确。这应该告诉您阅读函数的文档,看看为什么您假设的是错误的。这也应该告诉你如何使用这个函数,以及如何解决这个错误。谢谢你不仅回答了我的问题,而且告诉了所有我做错的事情。我是python新手,所以我真的很欣赏它!另外,我从来都不知道有一种拆分方法可以解释代码过于复杂的原因。谢谢你不仅回答了我的问题,而且告诉了我所有的错误。我是python新手,所以我真的很欣赏它!而且,我从来都不知道有一个split方法可以解释代码过于复杂的原因。我不确定否决票的原因,因为它简洁地回答了OP的要求。那个不提供评论就否决投票的胆小鬼会介意回答吗?我也看不出有什么问题,除非我删除!=。无论如何,让我向上投票。你可能会注意到原始列表以5结尾,这导致最后一项被解析为。这就是为什么这是需要的。谢谢,嗯?不,测试真的没有意义!=在这里如果我足够简单的话。请试一试,你会明白的。我不确定否决票的原因,因为它简洁地回答了OP的要求。那个不提供评论就否决投票的胆小鬼会介意回答吗?我也看不出有什么问题,除非我删除!=。无论如何,让我向上投票。你可能会注意到原始列表以5结尾,这导致最后一项被解析为。这就是为什么这是需要的。谢谢,嗯?不,测试真的没有意义!=在这里如果我足够简单的话。请试试看,你会明白的。