这是我对磁铁问题的解决方案,其中给你一个数字 n 并输入 n 行“10”或“01”磁铁。磁铁在相反的两极相互连接,您的任务是在所有连接或未连接后返回数字 g 或一组磁铁。
from itertools import tee
n = int(input())
magnets = []
for i in range(n):
magnet = input()
magnets.append(magnet)
def pairwise(iterable):
a, b = tee(iterable)
next(b, None)
return zip(a, b)
m = iter(magnets)
g = 1 # there will always be at least 1 group
for x, nxt in pairwise(m):
if x != nxt:
g += 1
else:
pass
print(g)
我不一定关心将其缩短到不可读的地步,我只是好奇是否有一种更简单的方法来以更简单的方式比较每个 i 和 i+1。
是的,总会有办法的! (如果我理解正确的话,当然描述的问题)
使用你的语法:
n = int(input())
magnets = [input() for _ in range(n)]
g = 1 # there will always be at least 1 group
for x, nxt in zip(magnets, magnets[1:]):
if x != nxt:
g += 1
print(g)
关于内存:您不必存储所有磁铁,只需存储前一个即可:
prev = None
groups = 0
n = int(input("count: "))
for i in range(n):
magnet = input("either 01 or 10: ")
if magnet != prev:
groups += 1
prev = magnet
print(groups)