我正在构建一个奥赛罗游戏,所以我在棋盘上有一个b
或w
坐标列表。
例如,我有列表中的坐标列表
list_a = [ [[1,2],[1,3],[1,4],[1,5],[1,6]], [[2,3],[3,4],[4,5]], [[3,5],[2,5],[1,5]] ]
列表1是[[1,2],[1,3],[1,4],[1,5],[1,6]] ### [1,4] is 'b' everything else is 'w'
列表2是[[2,3],[3,4],[4,5]] ### everything is 'w', no 'b'
第三个列表是[[3,5],[2,5],[1,5]] ### [1,5] is 'b'
list_b = []
我想将w
的所有坐标添加到list_b
停留在b
,但如果不w
,我不想附加任何b
之后有一个list_b
。
理想情况下,我希望[ [[1,2],[1,3]], [[3,5],[2,5]] ]
成为
[ [[1,2],[1,3],[1,4]], [[3,5],[2,5],[1,5] ]
我不介意是否
b
我可以稍后删除for
坐标。
最好的方法是什么?我目前正在课堂上使用while True
循环,if
,HttpConfiguration.Formatters.
语句等构建此内容。
答案 0 :(得分:0)
你从未说过董事会是什么或者坐标是如何连接的(对[1, 4]
来说可能类似于board[1][4] == 'b'
?),所以我只会使用你所指的字符串值,例如'wwbww'
代替[[1,2],[1,3],[1,4],[1,5],[1,6]]
。
import itertools
list_a = ['wwbww', 'www', 'wwb']
result = [list(itertools.takewhile(lambda x: x!='b', item)) for item in list_a if 'b' in item]
结果:
>>> result
[['w', 'w'], ['w', 'w']]
result
是list
理解,其中每个项目首先检查它是否包含'b'
(因为如果有'w'
,您只需要'b'
s在某处),然后在list
电话中创建itertools.takewhile()
。此函数从迭代中抓取每个元素,直到给定函数返回falsey值。要扩展:
import itertools
def okay_to_add(x):
return x != 'b'
result = []
for item in list_a:
if 'b' in item:
temp = []
for c in itertools.takewhile(okay_to_add, item):
temp.append(c)
result.append(temp)
结果完全相同。
您必须创建自己的okay_to_add
函数,而不是简单的x != 'b'
,查找电路板中的给定坐标并返回它是'b'
(或者'w'
,对于另一个玩家),你感兴趣的。