Python-删除2D列表中的列
我有一个2DPython-删除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中没有这样的快捷方式,除了迭代所有列表项并删除这些索引值 然而,你可以使用熊猫,这是为了其
列表=[[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
这种方法的优点是:
- 无需担心列表在迭代时被更改
- 无需导入其他库
- 列表理解是内置的
- 列表理解通常是筛选列表的最快方法(参见示例)
- 更容易阅读和维护其他解决方案(在我看来)
lst=[
[1, 8, 3],
[4, 5, 6],
[0, 5, 7],
]
过滤的\u lst=[
内螺纹元件
对于lst中的内螺纹
对于i,枚举中的内部元素(内部元素)
如果i==1
]
打印(已过滤)
# [8, 5, 5]
如果需要,可以将新列表重新分配给旧变量:
lst=filtered\u lst
这种方法的优点是:
- 无需担心列表在迭代时被更改
- 无需导入其他库
- 列表理解是内置的
- 列表理解通常是筛选列表的最快方法(参见示例)
- 更容易阅读和维护其他解决方案(在我看来)
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抱歉,我误读了您需要的内容(列表列表)。现在修复