在列表中搜索数字

时间:2015-02-01 04:32:20

标签: python

如果我的输出看起来像这样

[[121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111],
 [82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 110],
 [83, 50, 49, 48, 47, 46, 45, 44, 43, 72, 109],
 [84, 51, 26, 25, 24, 23, 22, 21, 42, 71, 108],
 [85, 52, 27, 10, 9, 8, 7, 20, 41, 70, 107],
 [86, 53, 28, 11, 2, 1, 6, 19, 40, 69, 106],
 [87, 54, 29, 12, 3, 4, 5, 18, 39, 68, 105],
 [88, 55, 30, 13, 14, 15, 16, 17, 38, 67, 104],
 [89, 56, 31, 32, 33, 34, 35, 36, 37, 66, 103],
 [90, 57, 58, 59, 60, 61, 62, 63, 64, 65, 102],
 [91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101]]

如何将它找到我能找到的地方并打印一定数量及其周围的数字?这是我的代码。

dim = 11
dx, dy = [0, 1, 0, -1], [1, 0, -1, 0]
x, y, c = 0, -1, dim**2
m = [[0 for i in range(dim)] for j in range(dim)]
for i in range(dim + dim - 1):
        for j in range((dim + dim - i) // 2):
                x += dx[i % 4]
                y += dy[i % 4]
                m[x][y] = c
                c -= 1
print(m)
b = c.index(num)
print(b)
a =('\n'.join([' '.join([str(v) for v in r])for r in m]))
print(a)

2 个答案:

答案 0 :(得分:1)

假设列表列表被称为lol: - ):

def neighbors(lol, anum):
    for i, row in enumerate(lol[1:-1]):
        try: where = row.index(anum)
        except ValueError: continue
        if where==0 or where==len(row)-1: continue
        for j in range(i, i+3):
            print(lol[j][where-1], lol[j][where], lol[j][where+1])
        print()

这体现了几个假设,例如:(A)你不关心第一行或最后一行或列的命中,因为它们没有你想要打印的所有邻居,还有(B)你不喜欢关注单行中的多个“命中”,但(C)关注多行中的“命中”。

当然,所有这些假设都可以改变,但这要求你在规范中 更精确,而不是到目前为止: - )。

如果您遇到Python 2,则print格式假定为Python 3或from __future__ import print_function

答案 1 :(得分:0)

首先,在这种情况下,c是一个int值,不属于index。所以以下命令将引发AttributeError

b = c.index(num)

并且为了获得所需的结果,您需要的是在以下命令中反转r列表,并且对于打印,您可以使用format

a =('\n'.join([' '.join(["{:3}".format(v) for v in r[::-1]])for r in m]))

所以结果将是:

111 112 113 114 115 116 117 118 119 120 121
110  73  74  75  76  77  78  79  80  81  82
109  72  43  44  45  46  47  48  49  50  83
108  71  42  21  22  23  24  25  26  51  84
107  70  41  20   7   8   9  10  27  52  85
106  69  40  19   6   1   2  11  28  53  86
105  68  39  18   5   4   3  12  29  54  87
104  67  38  17  16  15  14  13  30  55  88
103  66  37  36  35  34  33  32  31  56  89
102  65  64  63  62  61  60  59  58  57  90
101 100  99  98  97  96  95  94  93  92  91