如何查看字符串是否在列表中,然后更新字符串

时间:2014-12-04 15:38:07

标签: python list list-comprehension

我正在尝试实现转换功能。我已将转换存储在列表中:

def transistion(self, input):
    self.currentState = 'q1'
    self.delta = "[['q1', '0', 'q2'], ['q1', '1', 'q1']]"
    k = ast.literal_eval(self.delta)
    delta_list = [[x[0],tuple(x[1:])] for x in k]
    print(delta_list)

print(delta_list) # [['q1', ('0', 'q2')], ['q1', ('1', 'q1')]]

我需要:

  • 搜索delta_list以查看self.currentState是否是其中一个列表中的第一个元素
  • 如果找到第一个元素,请检查该列表并查看元组的第一个元素是否等于输入
  • 如果还找到了输入值,则将self.currentState设置为等于元组的第二个元素

1 个答案:

答案 0 :(得分:1)

为了让你开始,这个

def transistion(self, input):
    self.currentState = 'q1'
    self.delta = "[['q1', '0', 'q2'], ['q1', '1', 'q1']]"
    k = ast.literal_eval(self.delta)
    delta_list = [[x[0],tuple(x[1:])] for x in k]
    print(delta_list)

可以更简单地完成:

def transistion(self, input):
    self.currentState = 'q1'
    self.delta = eval("[['q1', '0', 'q2'], ['q1', '1', 'q1']]")
    delta_list = [[x[0],tuple(x[1:])] for x in self.delta]
    print(delta_list)

但为什么要打扰,除非这是一个测试工具?您可以将delta_list设置为您想要的 - 即使在测试工具中

delta_list = [['q1',('0','q2')],['q1', ('1', 'q1')]]

此时,它是一个基本的循环:

for t in delta_list:
    if self.current_state == t[0]:
        # rest of checks and actions. break if you change current state

但是为什么要打扰元组呢?您可以使用原始列表列表