Добавление только значений списка в другой список в цикле - PullRequest
0 голосов
/ 17 марта 2019

Я пытаюсь добавить и расширить элементы списка в цикле следующим образом:

y_predicts=[]
y_trues=[]

for train,test in cv.split(X,y):
    predict = classifier.fit(X.iloc[train],y.iloc[train]).predict(X.iloc[test])
    tmp_l=predict.tolist()
    y_predicts.append(tmp_l)
    y_trues.append(np.array(y.iloc[test]))

Результат приведенного выше кода выглядит примерно так:

print(y_predicts):
    [[1, 1, 0, 0, 0], [1, 0, 0, 1, 0]]

Но мой желаемый вывод должен выглядеть примерно так:

print(y_predicts):
    [1, 1, 0, 0, 0, 1, 0, 0, 1, 0]

Ответы [ 3 ]

1 голос
/ 17 марта 2019

В python два типа последовательностей могут быть объединены с помощью оператора +. Это также может произойти на месте с оператором +=

Вместо

y_predicts.append(tmp_l)

вы должны использовать

y_predicts += tmp_l

в вашем цикле.

Другим способом добавления всех элементов из одного списка в другой является extend метод списка. В отличие от метода append, который добавляет данный элемент целиком в список, extend добавляет все его элементы в список:

y_predicts.extend(tmp_l)
1 голос
/ 17 марта 2019

Вы можете использовать extend() вместо append(), он будет добавлять элементы из переданного списка, а не сам список.

b = []
a = [1, 2, 3, 4]
c = [6,7, 8]

b.extend(a)
b.extend(c)
print(b)

# > [1, 2, 3, 4, 6, 7, 8]
0 голосов
/ 17 марта 2019

Pythonic способ объединить два элемента списка вместе в один элемент списка состоит в использовании ключевого слова "удлинить" вместо добавления.

 y_predicts=[]
  y_trues=[]

  for train,test in cv.split(X,y):
      predict = classifier.fit(X.iloc[train],y.iloc[train]).predict(X.iloc[test])
      tmp_l=predict.tolist()
      y_predicts.extend(tmp_l)
      y_trues.append(np.array(y.iloc[test]))
...