我目前遇到一个问题是我的一个脚本。我试图实现以下规则:如果C3中的任何元素与C2中的任何元素匹配(空单元格除外)=>检查C1中与C3匹配元素具有相同索引的元素是否与C1中与C2 =>中匹配元素具有相同索引的元素匹配。如果是,则显示C4中具有索引作为C2匹配元素的元素。
输入是从中提取数据的Excel工作表,它看起来像这样:
C1 C2 C3 C4
P A
B X
C K
D M
P B B
P A D
C D E
D E K
E M W
F F Q
Q F Q
C1表示列'A',C2表示列'B',C3表示列'C',C4表示列'D'。在列的空白点我没有任何元素。
代码:
import openpyxl
import sys
C2=[None, None, None, None, 'B', 'A', 'D', 'E', 'M', 'F', 'F']
C3=['A', 'X', 'K', 'M', None, None, None, None, None, None, None]
try:
match=[name for name in C2 if name in C3]
match=[i for i in match if i is not None]
except:
print("No matches")
sys.exit(1)
C2_index=C2.index(match)
我做了一些调试,如果在try部分打印匹配,我得到['A', 'M']
,这是正确的。如果在编码后打印C2,我将获得[None, None, None, None, 'B', 'A', 'D', 'E', 'M', 'F', 'F']
,这也是正确的。当我运行整个脚本时,我收到以下错误:
Traceback (most recent call last):
File "test7.py", line 39, in <module>
C2_index=C2.index(match)
ValueError: ['A', 'M'] is not in list
您能告诉我为什么C2没有识别这些元素吗?
答案 0 :(得分:0)
您正在列表中搜索列表。所以你现在正在设置:
C2 = [None, None, None, None, 'B', 'A', 'D', 'E', 'M', 'F', 'F']
match = ['A', 'M']
然后C2.index(match)
在C2中查找列表['A','M']。有关.index
方法的详细信息,请参阅the docs。
要获取match
中每个元素的索引,您可以使用列表解析:
[C2.index(m) for m in match]
返回
[5, 8]
答案 1 :(得分:0)
因为您没有搜索特定项目,所以无法在列表中找到它。您实际上是在搜索子列表。
试试这个:
C2_index =[]
for i in match:
C2_index.append(C2.index(i))