Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python2D标签表查找_Python - Fatal编程技术网

Python2D标签表查找

Python2D标签表查找,python,Python,我这里有一张二维表格: X轴是以粗体显示的标记为24到68的宽度,Y轴是以粗体显示的高度18到84。我希望用户能够通过提示输入: width = input("Enter width: ") height = input("Enter height: ") 和查找并打印此表上的相应值 我的原始解决方案一开始只是定义一个矩阵: list1 = [ [229, 252, 275], [242, 266, 289], [256, 280, 305]] 并查找值: if width == "20"

我这里有一张二维表格:

X轴是以粗体显示的标记为24到68的宽度,Y轴是以粗体显示的高度18到84。我希望用户能够通过提示输入:

width = input("Enter width: ")
height = input("Enter height: ")
和查找并打印此表上的相应值

我的原始解决方案一开始只是定义一个矩阵:

list1 = [
[229, 252, 275],
[242, 266, 289],
[256, 280, 305]] 
并查找值:

if width == "20" and height == "32": 
    print(list1[0][0])
elif width == "20" and height == "36": 
    print(list1[0][1])
这将是一项繁重的工作。我还有其他像这样更大的桌子。必须有一种更简单的方法根据列和行标签在表中查找值


我到处找了找,找不到我需要的东西。如果可能的话,我真的很想保留这一切。谢谢:

您可以创建函数将宽度/高度映射到列表索引,这样您就可以执行类似于list1[widthIndex20][heightIndex32]的操作。我建议使用函数,因为根据您的示例,并非所有宽度/高度都直接表示在表中。这个函数看起来可能和你的ifs一样丑陋,但至少只有2n个而不是n^2个;nd由于您的表是非常规则的,一个包含6或4除的公式可能会使它非常紧凑。

如果您不能确定索引可以通过标签计算,您可以创建两个包含列和行标签的辅助表:

widths = [24, 28, 32, ...]
heights = [18, 24, 30, ...]
然后像这样查找表格:

list1[widths.index(width)][heights.index(height)]
或者,可以反转两个辅助表以直接从标签映射到索引:

width_idx = {w: i for i, w in enumerate(widths)}
height_idx = {h: i for i, h in enumerate(heights)}
然后你可以做:

list1[width_idx[width]][height_idx[height]]

看看pandas,它支持值查找,并且在示例列表与表不匹配后,它会快速查找您的内容;您使用ifs的示例也不匹配。宽度[20]会产生什么结果?如果列表的第21个条目有那么长,那么您将得到一个索引器。对不起;我是说宽度。除非得到0,否则它不会产生给定示例中描述的结果。好吧,这可能是列表中20的索引,或者如果它不包含,则会引发一些异常。20不在列表中,因此会引发异常。但给出的例子使用了20;因此,您的解决方案在示例中失败。