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

Python 如何查看字符串是否在列表中,然后更新字符串,python,list,list-comprehension,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_lis

我正在尝试实现一个转换函数。我已将转换存储在列表中:

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_列表,查看self.currentState是否是其中一个列表中的第一个元素
  • 如果找到第一个元素,请检查该列表并查看元组的第一个元素是否等于输入
  • 如果还找到了输入值,请将self.currentState设置为元组的第二个元素

为了让您开始,以下是

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循环:

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

但是为什么要费心处理元组呢?您只需使用原始列表即可

您没有“将它们存储在列表中”。您使用列表理解将它们存储在列表中。作为旁注,“问题”本身(“>我需要”部分)非常简单。你试过什么没用的?这个的复制品@Hackaholic不确定这是个复制品。是的,它是解析,提到了ast.literal\u eval,但真正的问题是下一步该做什么。OP至少已经将字符串解析为一个列表——以这种或那种方式。@Hackaholic:当前的问题不是重复的