首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在列表中查找列表索引的优雅方法?

在列表中查找列表索引的优雅方法?
EN

Stack Overflow用户
提问于 2019-04-30 07:24:52
回答 2查看 57关注 0票数 1

对python来说还是个新手。我正在尝试按行/列索引CSV文件中的项目。我发现的唯一方法是实现一个for循环来搜索列表中的每一行。

代码语言:javascript
运行
复制
readCSV = [['', 'A', 'B', 'C', 'D'],
          [1.0, 3.1, 5.0, 1.7, 8.2],
          [2.0, 6.2, 7.0, 2.2, 9.3],
          [3.0, 8.8, 5.5, 4.4, 6.0]]

row_column = []
for row in readCSV:
    if my_item in row:
        row_column.append(row[0])
        row_column.append(readCSV[0][row.index(my_item)])

所以对于my_item = 6.2,我得到了row_column = [2.0, 'A']

这很好用,但我不禁想到还有一个更优雅的解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-30 15:27:02

试试这个:

代码语言:javascript
运行
复制
result = [(i, j) for i, k in enumerate(readCSV) for j, n in enumerate(k) if my_item == n]
票数 0
EN

Stack Overflow用户

发布于 2019-04-30 16:05:58

代码语言:javascript
运行
复制
import pandas as pd
import numpy as np

df = pd.DataFrame(readCSV[1:],columns=readCSV[0])
#### Output ####
    No    A    B    C    D
0  1.0  3.1  5.0  1.7  8.2
1  2.0  6.2  7.0  2.2  9.3
2  3.0  8.8  5.5  4.4  6.0


##This provides the row in which there is a hit.
df1 = df[(df.A == my_item) | (df.B == my_item) |(df.C == my_item) | (df.D == my_item)]
print(df1)

#### Output ####
    No    A    B    C    D
1  2.0  6.2  7.0  2.2  9.3


##If you want only those column values which is a hit for your my_item.
z1 = pd.concat([df[df['A'] == my_item][['No','A']],df[df['B'] == my_item][['No','B']],df[df['C'] == my_item][['No','C']],df[df['D'] == my_item][['No','D']]])
print(z1)

#### Output ####
     A   B   C   D   No
1  6.2 NaN NaN NaN  2.0


## Incase if you want drop the nan , you can use np.isnan
z1 = np.array(z1)
print(z1[:,~np.any(np.isnan(z1), axis=0)])

#### Output ####
[[6.2 2. ]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55912007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档