如果在列表元素中找到某个字符,则返回该元素的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' 全码自动取款机:如果在列表元素中找到某个字符,则返回该元素的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
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']
谢谢那看起来真像蟒蛇。(贝丹克,马蒂恩!)谢谢。那看起来真像蟒蛇。(贝丹克,马蒂恩!)