从字符串创建嵌套列表,每个列表中包含恒定数量的元素

时间:2017-10-27 21:53:34

标签: python list nested

我发现了一个非常相似的帖子,他们在每个列表中都有三个项目,但我似乎不明白如何将其切换为五个。 这是来自.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时,它表示列表超出范围。有人可以解释如何增加列表所涵盖的元素数量吗?

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

In [9]: from sklearn.datasets import make_classification
   ...: X, y = make_classification(n_samples=1000, n_features=4,
   ...:             n_informative=2, n_redundant=0,
   ...:             random_state=0, shuffle=False)
   ...:

In [10]: X.shape
Out[10]: (1000, 4)

In [11]: y.shape
Out[11]: (1000,)

In [12]: forest.fit(X,y)
Out[12]:
RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
            max_depth=4, max_features='auto', max_leaf_nodes=None,
            min_impurity_split=1e-07, min_samples_leaf=1,
            min_samples_split=2, min_weight_fraction_leaf=0.0,
            n_estimators=10, n_jobs=1, oob_score=False, random_state=None,
            verbose=0, warm_start=False)

In [13]: len(forest)
Out[13]: 10

输出:

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]

答案 1 :(得分:0)

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

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

thanx @ Stefan Pochmann的笔记