Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.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
如果在列表元素中找到某个字符,则返回该元素的python方法_Python - Fatal编程技术网

如果在列表元素中找到某个字符,则返回该元素的python方法

如果在列表元素中找到某个字符,则返回该元素的python方法,python,Python,我有个问题。我正在编写一个数独解算器,例如,对于正方形A1,我想找到子网格中9个相邻正方形的列表(A1、A2、A3、B1、B2、B3、C1、C2、C3) 我的计划是将A1分成A和1,然后返回'ABC'和'123'的叉积,但我不知道如果平方[0]='A',如何优雅地返回'ABC' 我想找到一种优雅的方法,从一组列表中返回元素所在的列表。['ABC','DEF','GHI'],当我输入A时,我想得到字符串'ABC' 全码自动取款机: def cross_product(A, B): """R

我有个问题。我正在编写一个数独解算器,例如,对于正方形A1,我想找到子网格中9个相邻正方形的列表(A1、A2、A3、B1、B2、B3、C1、C2、C3)

我的计划是将A1分成A和1,然后返回'ABC'和'123'的叉积,但我不知道如果平方[0]='A',如何优雅地返回'ABC'

我想找到一种优雅的方法,从一组列表中返回元素所在的列表。['ABC','DEF','GHI'],当我输入A时,我想得到字符串'ABC'

全码自动取款机:

def cross_product(A, B):
    """Returns a list of the cross product of A and B."""
    return [a+b for a in A for b in B]

rows    = 'ABCDEFGHI'
cols    = '123456789'
squares = cross_product(rows, cols) # List of 81 squares

def find_row(square):
    """
    Returns list of strings with corresponding row values.
    Example: find_row('A2') -> ['A1','A2', ..., 'A9'] 
    """
    return cross_product(square[0], cols)

def find_col(square):
    """
    Returns list of strings with corresponding col values.
    Example: find_col('A2') -> ['A2','B2', ..., 'I2']
    """
    return cross_product(rows, square[1])

 def find_peers(square):
    """
    Returns list of strings of shared squares in the unit.
    Example: find_peers('A2') -> ['A1', 'A2', 'A3', 'B1' , ..., 'C3']
    """
    for e in ['ABC','DEF','GHI']:
        if square[0] in e:
            r = e

    for e in ['123','456','789']:
        if square[1] in e:
            c = e

    return cross_product(r, c)

有没有办法让find_peers(square)更像蟒蛇

如果要硬编码测试列表,可以使用字典:

square_letter = {c: e for e in ['ABC','DEF','GHI'] for c in e}
square_number = {n: e for e in ['123','456','789'] for n in e}
r, c = square_letter[square[0]], square_number[square[1]]
square\u字母
square\u数字
字典只需生成一次。然后使用字典进行O(1)(恒定时间)查找

如果这对性能至关重要,则可以通过默认参数将映射作为局部变量绑定到函数:

square_letter = {c: e for e in ['ABC','DEF','GHI'] for c in e}
square_number = {n: e for e in ['123','456','789'] for n in e}
def find_peers(square, _letter=square_letter, _number=square_number):
    """
    Returns list of strings of shared squares in the unit.
    Example: find_peers('A2') -> ['A1', 'A2', 'A3', 'B1' , ..., 'C3']
    """
    return cross_product(_letter[square[0]], _number[square[1]])
演示:


如果要硬编码测试列表,可以使用字典:

square_letter = {c: e for e in ['ABC','DEF','GHI'] for c in e}
square_number = {n: e for e in ['123','456','789'] for n in e}
r, c = square_letter[square[0]], square_number[square[1]]
square\u字母
square\u数字
字典只需生成一次。然后使用字典进行O(1)(恒定时间)查找

如果这对性能至关重要,则可以通过默认参数将映射作为局部变量绑定到函数:

square_letter = {c: e for e in ['ABC','DEF','GHI'] for c in e}
square_number = {n: e for e in ['123','456','789'] for n in e}
def find_peers(square, _letter=square_letter, _number=square_number):
    """
    Returns list of strings of shared squares in the unit.
    Example: find_peers('A2') -> ['A1', 'A2', 'A3', 'B1' , ..., 'C3']
    """
    return cross_product(_letter[square[0]], _number[square[1]])
演示:


另一种解决方案,不使用dict:

from itertools import product

rows = list('ABCDEFGHI')
cols = list('123456789')
square_width = 3

def find_peers(cell):
    row, column = cell
    row_idx = rows.index(row)
    column_idx = cols.index(column)

    first_row = row_idx - row_idx % square_width
    first_column = column_idx - column_idx % square_width

    rows_range = rows[first_row:first_row + square_width]
    columns_range = cols[first_column:first_column + square_width]

    return [
        row + column for row, column in product(rows_range, columns_range)
    ]

>>> find_peers('A1')
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

>>> find_peers('D1')
['D1', 'D2', 'D3', 'E1', 'E2', 'E3', 'F1', 'F2', 'F3']

>>> find_peers('G1')
['G1', 'G2', 'G3', 'H1', 'H2', 'H3', 'I1', 'I2', 'I3']

>>> find_peers('G4')
['G4', 'G5', 'G6', 'H4', 'H5', 'H6', 'I4', 'I5', 'I6']

另一种解决方案,不使用dict:

from itertools import product

rows = list('ABCDEFGHI')
cols = list('123456789')
square_width = 3

def find_peers(cell):
    row, column = cell
    row_idx = rows.index(row)
    column_idx = cols.index(column)

    first_row = row_idx - row_idx % square_width
    first_column = column_idx - column_idx % square_width

    rows_range = rows[first_row:first_row + square_width]
    columns_range = cols[first_column:first_column + square_width]

    return [
        row + column for row, column in product(rows_range, columns_range)
    ]

>>> find_peers('A1')
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

>>> find_peers('D1')
['D1', 'D2', 'D3', 'E1', 'E2', 'E3', 'F1', 'F2', 'F3']

>>> find_peers('G1')
['G1', 'G2', 'G3', 'H1', 'H2', 'H3', 'I1', 'I2', 'I3']

>>> find_peers('G4')
['G4', 'G5', 'G6', 'H4', 'H5', 'H6', 'I4', 'I5', 'I6']

谢谢那看起来真像蟒蛇。(贝丹克,马蒂恩!)谢谢。那看起来真像蟒蛇。(贝丹克,马蒂恩!)