Добавление только значений списка в другой список в цикле

#python #arrays #list #dataframe #append

#python #массивы #Список #dataframe #добавить

Вопрос:

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

 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]
  

Комментарии:

1. Вы захотите extend , не append

Ответ №1:

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

Вместо

 y_predicts.append(tmp_l)
  

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

 y_predicts  = tmp_l
  

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

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

 y_predicts.extend(tmp_l)
  

Ответ №2:

Вы можете использовать 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]
  

Ответ №3:

Pythonic способ объединить два элемента списка в один элемент списка — использовать ключевое слово «extend» вместо append.

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