В списке списков, как получить все элементы, кроме последнего, для каждого списка?

#python #list #python-3.x

#python #Список #python-3.x

Вопрос:

Итак, у меня есть этот список списков. В каждом вложенном списке есть n 1 элемент, где первый элемент является плавающим, а последний — целым числом. Мне нужно получить для каждого вложенного списка все числа с плавающей запятой (таким образом, n элементов из n 1 ). Какой наилучший способ добиться этого?

Например:

 x = [[0.1, 0.2, 1], [0.4, 0.05, 16], [0.3, 0.3, 5]]
output = [[0.1, 0.2], [0.4, 0.05], [0.3, 0.3]]
  

Ответ №1:

Это самый короткий и простой способ:

 output = [l[:-1] for l in x]
  

Это называется пониманием списка .

Ответ №2:

Если вы уверены int , что всегда будет последним, нарезка — это вариант, при котором вы обрезаете последний элемент из каждого вложенного списка sub в x with sub[:-1] ( [:-1] означает захват всех, кроме последнего элемента):

 out = [sub[:-1] for sub in x] # or sub[:2] if sub is always 3 elements long
print(out)
[[0.1, 0.2], [0.4, 0.05], [0.3, 0.3]]
  

В качестве альтернативы, вы можете сделать это путем перебора элементов x , перебора каждого подэлемента и оценки, является ли он экземпляром a float , т.е.:

 out = [[i for i in sub if isinstance(i, float)] for sub in x]
  

Это отфильтровывает любой элемент списка sub , который является вложенным списком, x который не является экземпляром float типа. Это работает независимо от позиционирования, поэтому вы можете использовать его, если позиция int не всегда последняя:

 print(out)
[[0.1, 0.2], [0.4, 0.05], [0.3, 0.3]]
  

Наконец, для подхода на месте for цикл и pop редактирование являются жизнеспособным вариантом:

 for s in x: _ = s.pop()
  

Теперь x изменено на:

 print(x)
[[0.1, 0.2], [0.4, 0.05], [0.3, 0.3]]
  

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

1. Если кто-то считает, что этот ответ бесполезен, я был бы более чем готов отредактировать его и исправить. 🙂