【问题标题】:Splitting strings within nested lists [duplicate]在嵌套列表中拆分字符串[重复]
【发布时间】:2021-05-17 17:06:15
【问题描述】:

我正在尝试在嵌套列表中拆分字符串,但无论出于何种原因,这些字符串都没有按照我的预期进行拆分。例如,这是一个嵌套列表,其中我有要拆分的字符串。

myList=[['letters', ['a b c d e', 'f g h i j']], ['digits', ['0 1 2 3 4', '5 6 7 8 9']]]

我曾尝试使用for 循环来拆分每个字符串,但它似乎不起作用。我尝试使用以下代码:

for i in myList:
    for j in i[1]:
        j=j.split()

但是,它似乎对列表没有任何作用。我希望在运行代码后,myList 应该包含

[['letters', [['a', 'b', 'c', 'd', 'e'], ['f', 'g', 'h', 'i', 'j']]], ['digits', [['0', '1', '2', '3', '4'], ['5', '6', '7', '8', '9']]]]

如果我使用print()repr() 查看每个项目,我会看到我期望的字符串。

for i in myList2:
    for j in i[1]:
        print(repr(j))

打印出来

'a b c d e'
'f g h i j'
'0 1 2 3 4'
'5 6 7 8 9'

正如我所料,所以我不确定为什么无法写入拆分值。

【问题讨论】:

  • 仅设置变量并不会将其分配回列表。做for index, j in enumerate(i[1]): i[index] = j.split()
  • “split”-result 分配给变量“j”,该变量在下一次 for-iteration 中被覆盖而不使用结果。

标签: python python-3.x


【解决方案1】:

j = j.split() 语法不会修改j 引用的对象,它只是将j 引用到一个新事物:拆分列表,并且对主列表没有影响,您需要创建一个新的

myList = [[i[0], [j.split() for j in i[1]]] for i in myList]

较重,但可能更易于理解的语法

result = []
for i in myList:
    tmp_list = []
    for j in i[1]:
        tmp_list.append(j.split())
    result.append([i[0], tmp_list])
print(result)

【讨论】:

    【解决方案2】:

    您应该在嵌套列表中指定要覆盖的位置。修改你的代码如下:

    for idx, i in enumerate(myList):
        for ix, j in enumerate(i[1]):
            # j = j.split()
            myList[idx][1][ix] = j.split()
    
    print(myList)
    

    产生所需的输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-26
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多