【问题标题】:create nested lists from string with constant number of elements in each list从字符串创建嵌套列表,每个列表中的元素数量恒定
【发布时间】:2017-10-27 21:53:33
【问题描述】:

我发现了一个非常相似的帖子,他们在每个列表中使用了三个项目,但是我似乎不明白如何将其切换为五个。 这是来自 .csv 文件的字符串,在新行处拆分以创建多个字符串:

['0,3,2,1,0', '0,1,2,3,0', '0,1,3,2,0', '1,0,2,3,0', '3,0,0,2,1', '1,0,2,3,0', '1,3,0,2,0', '0,0,1,0,0', '0,2,1,0,0', '3,1,0,2,0', '3,2,0,0,1', '2,0,0,3,1', '0,2,0,1,2', '2,0,3,0,1', '0,3,0,1,2', '2,3,1,0,0']

我需要把它变成这样:

[['0,3,2,1,0'], ['0,1,2,3,0'], ['0,1,3,2,0'], ['1,0,2,3,0'], ['3,0,0,2,1'], ['1,0,2,3,0'], ['1,3,0,2,0'], ['0,0,1,0,0'], ['0,2,1,0,0'], ['3,1,0,2,0'], ['3,2,0,0,1'], ['2,0,0,3,1'], ['0,2,0,1,2'], ['2,0,3,0,1'], ['0,3,0,1,2'], ['2,3,1,0,0']]

此字符串列表稍后将包含更多项目,因此我无法手动设置每个列表应开始和结束的边界,这将花费大量时间。

他们在类似帖子中的做法是这样的:

i=0
new_list=[]
while i<len(data_list):
  new_list.append(data_list[i:i+3])
  i+=3

但是,当我将值更改为 5 时,它显示列表超出范围。有人可以解释一下如何增加列表涵盖的元素数量吗?

【问题讨论】:

  • 试试这个:[[e] for e in l]
  • 我试过了,但它只为每个列表提供一个数字
  • 我在 Ajax 在下面给出答案的同时发表了评论。这怎么行不通? l 是您的长长名单。
  • 是的,我明白这一点,我用我的列表名称替换了 L。它给了我这个 [['0'], [','], ['3'], [','], ['2'], (etc)
  • 我投票结束这个问题,因为数据结构显然不是这里发布的内容。

标签: python list nested


【解决方案1】:

你可以试试这个:

s = ['0,3,2,1,0', '0,1,2,3,0', '0,1,3,2,0', '1,0,2,3,0', '3,0,0,2,1', '1,0,2,3,0', '1,3,0,2,0', '0,0,1,0,0', '0,2,1,0,0', '3,1,0,2,0', '3,2,0,0,1', '2,0,0,3,1', '0,2,0,1,2', '2,0,3,0,1', '0,3,0,1,2', '2,3,1,0,0']
final_s = [[i] for i in s]

输出:

[['0,3,2,1,0'], ['0,1,2,3,0'], ['0,1,3,2,0'], ['1,0,2,3,0'], ['3,0,0,2,1'], ['1,0,2,3,0'], ['1,3,0,2,0'], ['0,0,1,0,0'], ['0,2,1,0,0'], ['3,1,0,2,0'], ['3,2,0,0,1'], ['2,0,0,3,1'], ['0,2,0,1,2'], ['2,0,3,0,1'], ['0,3,0,1,2'], ['2,3,1,0,0']]

【讨论】:

    【解决方案2】:

    这是另一个与您编写的解决方案非常相似的解决方案

      mylist=['0,3,2,1,0', '0,1,2,3,0', '0,1,3,2,0', '1,0,2,3,0', '3,0,0,2,1', '1,0,2,3,0', '1,3,0,2,0', '0,0,1,0,0', '0,2,1,0,0', '3,1,0,2,0', '3,2,0,0,1', '2,0,0,3,1', '0,2,0,1,2', '2,0,3,0,1', '0,3,0,1,2', '2,3,1,0,0']
    
    i=0
    
    newlist=[]
    
    while (i< len(mylist)):
     newlist.append((mylist[i:i+1])) # just need add [ ]  
    
     i+=1
    
    print newlist
    

    输出:

    [['0,3,2,1,0'], ['0,1,2,3,0'], ['0,1,3,2,0'], ['1,0,2,3,0'], ['3,0,0,2,1'], ['1,0,2,3,0'], ['1,3,0,2,0'], ['0,0,1,0,0'], ['0,2,1,0,0'], ['3,1,0,2,0'], ['3,2,0,0,1'], ['2,0,0,3,1'], ['0,2,0,1,2'], ['2,0,3,0,1'], ['0,3,0,1,2'], ['2,3,1,0,0']]
    

    感谢@Stefan Pochmann 的说明

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 2014-02-10
      • 2016-02-12
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      相关资源
      最近更新 更多