解决Kattis问题时列表索引超出范围

时间:2019-06-20 15:16:51

标签: python python-3.x python-2.7 list

我正在解决此问题(https://open.kattis.com/problems/whowantstoliveforever)。而且由于_list[index-1] == "0"_list[index+1] == "0",列表索引超出范围,显然它不存在。我想知道是否有更好的方法来解决这个问题。

下面是我的代码。

import sys


def liveForever(input_list):
    if len(set(input_list)) < 1:
        return True
    else:
        return False
    return False


def print_result(boolean):
    print("LIVE" if boolean else "DIES")


num_cases = int(sys.stdin.readline().strip())
for i in range(num_cases):
    _list = []
    case = sys.stdin.readline().strip()
    for char in case:
        _list.append(char)
    for index in range(len(_list)):
        if (_list[index-1] == "0" and _list[index+1] == "0") or (_list[index-1] == "1" and _list[index+1] == "1"):
            _list[index] == "0"
        elif(_list[index-1] == "0" and _list[index+1] == "1") or (_list[index-1] == "1" and _list[index+1] == "0"):
            _list[index] == "1"
        print(_list)
    print_result(liveForever(_list))

基本上,根据列表,我的输出必须是LIVES或DIES。

1 个答案:

答案 0 :(得分:0)

为了解释一个老医生的笑话,如果某些原因导致程序崩溃,then don't do that.

The assignment明确指定有效范围之外的任何位的值都假定为零。因此,在访问列表之前,只需检查索引是否超出范围并返回零即可。一种方法是使用包装器函数,例如:

def get_bit(bits, i):
    if 0 <= i < len(bits):
        return bits[i]
    else:
        return 0

还有其他可能更有效的方法来获得相同的结果,但我将保留本应进行的代码优化工作。

Ps。请注意,您的代码还(至少)有一个其他错误:在迭代时,您正在修改位列表。由于下一步骤的位状态应取决于上一步中的这些位及其邻居的状态,因此在更新它们之前,将给出错误的结果。要使其正常工作,您需要有两个列表,以便您可以在一个中存储更新的值,而从另一个中读取旧的值。