Python-删除2D列表中的列

Python-删除2D列表中的列,python,list,loops,iteration,nested-lists,Python,List,Loops,Iteration,Nested Lists,我有一个2D列表=[[1,8,3],[4,5,6],[0,5,7],我想删除循环中的列 例如,索引为0(第一个)和2(最后一个)的列—删除后的结果应该是:[8,5,5]。 有一个问题,因为当我删除第0列时,列表的大小减小到(0,1),第2个索引超出范围。 在没有范围外问题的情况下,删除循环中的列的最快方法是什么 要获得更好的图片: [[1,8,3], [4, 5, 6], [0, 5, 7]] python中没有这样的快捷方式,除了迭代所有列表项并删除这些索引值 然而,你可以使用熊猫,这是为了其

我有一个2D
列表=[[1,8,3],[4,5,6],[0,5,7]
,我想删除循环中的列

例如,索引为0(第一个)和2(最后一个)的列—删除后的结果应该是:
[8,5,5]
。 有一个问题,因为当我删除第0列时,列表的大小减小到(0,1),第2个索引超出范围。 在没有范围外问题的情况下,删除循环中的列的最快方法是什么

要获得更好的图片:

[[1,8,3],
[4, 5, 6],
[0, 5, 7]]

python中没有这样的快捷方式,除了迭代所有列表项并删除这些索引值

然而,你可以使用熊猫,这是为了其他目的,但会做的任务

import pandas as pd

s = [[1, 8, 3], [4, 5, 6], [0, 5, 7]]
df = pd.DataFrame(s,columns=['val1','val2','val3'])
li = df.drop('val1',axis=1).values.tolist()
现在李看起来像这样

[[8, 3], [5, 6], [5, 7]]

python中没有这样的快捷方式,除了迭代所有列表项并删除那些索引值

然而,你可以使用熊猫,这是为了其他目的,但会做的任务

import pandas as pd

s = [[1, 8, 3], [4, 5, 6], [0, 5, 7]]
df = pd.DataFrame(s,columns=['val1','val2','val3'])
li = df.drop('val1',axis=1).values.tolist()
现在李看起来像这样

[[8, 3], [5, 6], [5, 7]]

如果我正确理解了您的问题,您希望保留每个列表的中间元素(索引1),在这种情况下,我建议创建一个新列表。当然,还有其他更好的方法。但如果这对你有效,你可以试试这个:

twoD_list = [[1, 8, 3], [4, 5, 6], [0, 5, 7]]

def keep_col( twoD_list ,index_to_keep = 1):
   final_list = []
   for x in twoD_list:
       final_list.append(x[index_to_keep])
   return final_list

final_list = keep_col( twoD_list , 1)
最终输出:

[8,5,5]

如果我正确理解了您的问题,您希望保留每个列表的中间元素(索引1),在这种情况下,我建议创建一个新列表。当然,还有其他更好的方法。但如果这对你有效,你可以试试这个:

twoD_list = [[1, 8, 3], [4, 5, 6], [0, 5, 7]]

def keep_col( twoD_list ,index_to_keep = 1):
   final_list = []
   for x in twoD_list:
       final_list.append(x[index_to_keep])
   return final_list

final_list = keep_col( twoD_list , 1)
最终输出:

[8,5,5]

您可以这样使用
numpy

import numpy as np

my_list =  np.array([[1, 8, 3], [4, 5, 6], [0, 5, 7]])
new_list = my_list[:, 1].copy()

print(new_list)
输出:

>>> [8, 5, 5]
>>> [8, 5, 5]

另外
numpy.delete(您的列表、索引、轴)
也可以执行相同的工作:

new_list = np.delete(my_list,(0, 2), axis=1) 
  • (0,2)是第0列和第2列的索引
  • axis=1表示numpy(0,2)是列索引而不是行
  • 如果要删除第0行和第2行,可以将axis=1更改为axis=0
输出有点不同:

>>> array([[8],
       [5],
       [5]])  

对于纯python方法:

my_list = [[1, 8, 3], [4, 5, 6], [0, 5, 7]]
new_list = [value[1] for value in my_list] 

print(new_list)
输出:

>>> [8, 5, 5]
>>> [8, 5, 5]

您可以这样使用
numpy

import numpy as np

my_list =  np.array([[1, 8, 3], [4, 5, 6], [0, 5, 7]])
new_list = my_list[:, 1].copy()

print(new_list)
输出:

>>> [8, 5, 5]
>>> [8, 5, 5]

另外
numpy.delete(您的列表、索引、轴)
也可以执行相同的工作:

new_list = np.delete(my_list,(0, 2), axis=1) 
  • (0,2)是第0列和第2列的索引
  • axis=1表示numpy(0,2)是列索引而不是行
  • 如果要删除第0行和第2行,可以将axis=1更改为axis=0
输出有点不同:

>>> array([[8],
       [5],
       [5]])  

对于纯python方法:

my_list = [[1, 8, 3], [4, 5, 6], [0, 5, 7]]
new_list = [value[1] for value in my_list] 

print(new_list)
输出:

>>> [8, 5, 5]
>>> [8, 5, 5]

假设您始终只需要第二个元素,并且内部列表始终至少有两个元素

具有列表理解功能的纯python:

lst=[
[1, 8, 3],
[4, 5, 6],
[0, 5, 7],
]
过滤的\u lst=[
内螺纹元件
对于lst中的内螺纹
对于i,枚举中的内部元素(内部元素)
如果i==1
]
打印(已过滤)
# [8, 5, 5]
如果需要,可以将新列表重新分配给旧变量:

lst=filtered\u lst
这种方法的优点是:

  • 无需担心列表在迭代时被更改
  • 无需导入其他库
  • 列表理解是内置的
  • 列表理解通常是筛选列表的最快方法(参见示例)
  • 更容易阅读和维护其他解决方案(在我看来)

假设您始终只需要第二个元素,并且内部列表始终至少有两个元素

具有列表理解功能的纯python:

lst=[
[1, 8, 3],
[4, 5, 6],
[0, 5, 7],
]
过滤的\u lst=[
内螺纹元件
对于lst中的内螺纹
对于i,枚举中的内部元素(内部元素)
如果i==1
]
打印(已过滤)
# [8, 5, 5]
如果需要,可以将新列表重新分配给旧变量:

lst=filtered\u lst
这种方法的优点是:

  • 无需担心列表在迭代时被更改
  • 无需导入其他库
  • 列表理解是内置的
  • 列表理解通常是筛选列表的最快方法(参见示例)
  • 更容易阅读和维护其他解决方案(在我看来)
L是2D列表:

print(map(lambda x: x[1:], L))
L是2D列表:

print(map(lambda x: x[1:], L))

通过
itemgetter
提取索引1中的值

from operator import itemgetter
my_list = [[1, 8, 3], [4, 5, 6], [0, 5, 7]]
result = list(map(itemgetter(1), my_list))

通过
itemgetter
提取索引1中的值

from operator import itemgetter
my_list = [[1, 8, 3], [4, 5, 6], [0, 5, 7]]
result = list(map(itemgetter(1), my_list))
试试这个

my_list = [[1, 8, 3], [4, 5, 6], [0, 5, 7]]

filter_col=[0,2]
col_length=3

my_list=[[x[i] for i in range(col_length) if i not in filter_col] for x in my_list]
你不想直接改变你正在处理的列表

这将执行列表理解以从现有列表创建新列表

编辑: 刚刚看到你只想要一份简单的清单

假设您只需要一个元素作为您可以使用的列表

my_list=[x[1] for x in my_list]
试试这个

my_list = [[1, 8, 3], [4, 5, 6], [0, 5, 7]]

filter_col=[0,2]
col_length=3

my_list=[[x[i] for i in range(col_length) if i not in filter_col] for x in my_list]
你不想直接改变你正在处理的列表

这将执行列表理解以从现有列表创建新列表

编辑: 刚刚看到你只想要一份简单的清单

假设您只需要一个元素作为您可以使用的列表

my_list=[x[1] for x in my_list]

嘿,在你的解决方案中:
list\u of_columns=[0,2]print(list(zip(*[d for i,d in enumerate(zip(*self.csv))如果我不在list\u of_columns]))
结果是
[(8,),(5,),(5,)]
@kuziolewski抱歉,我误读了你需要的内容(列表)。现在在您的解决方案中解决了他们:
list\u of_columns=[0,2]print(list(如果我不在list\u of_columns中,则为我的d,d在枚举中(zip(*self.csv)))
结果是
[(8,),(5,),(5,)]
但我需要
[[8],[5],[5]
@kuziolewski抱歉,我误读了您需要的内容(列表列表)。现在修复