学习Python:根据条件更改列表中的值

学习Python:根据条件更改列表中的值,python,Python,很抱歉提出了一个非常基本的问题,但这实际上是一个由两部分组成的问题: 给定一个列表,我需要将“?”的值替换为“I”,将“x”的值替换为整数10。列表并不总是有相同数量的元素,因此我需要一个允许我这样做的循环 a = ['1', '7', '?', '8', '5', 'x'] 如何获取值等于“?”的索引。如果这能告诉我如何抓取列表中的所有索引和值,那就太好了 为其编写函数,并使用map()对每个元素调用它: def _replaceitem(x): if x == '?':

很抱歉提出了一个非常基本的问题,但这实际上是一个由两部分组成的问题:

  • 给定一个列表,我需要将“?”的值替换为“I”,将“x”的值替换为整数10。列表并不总是有相同数量的元素,因此我需要一个允许我这样做的循环

    a = ['1', '7', '?', '8', '5', 'x']
    
  • 如何获取值等于“?”的索引。如果这能告诉我如何抓取列表中的所有索引和值,那就太好了


  • 为其编写函数,并使用
    map()
    对每个元素调用它:

    def _replaceitem(x):
        if x == '?':
            return 'i'
        elif x == 'x':
           return 10
        else:
            return x
    
    a = map(_replaceitem, a)
    
    请注意,这将创建一个新列表。如果列表太大或者您出于其他原因不想使用它,您可以使用
    for i in xrange(len(a)):
    ,然后根据需要更新
    a[i]

    要从列表中获取
    (索引,值)
    对,请使用它返回生成此类对的迭代器

    要获取列表中包含给定值的第一个索引,请使用。

    表示1:

    for i in range(len(a)):
        if a[i] == '?':
            a[i] = 'i'
        elif a[i] == 'x':
            a[i] = 10
    
    对于2,你所说的“关键”是什么意思?如果你是指索引:

    index = a.index('?')
    

    它是一个名为“索引”的函数:

    >>> a = ['1', '7', '?', '8', '5', 'x']
    >>> a.index('?')
    2
    

    从阅读文章开始。我认为您正在寻找
    list.index

    只是因为还没有人提到它,下面是我最喜欢的非for循环习惯用法,用于执行以下替换:

    a = ['1', '7', '?', '8', '5', 'x']
    for index, item in enumerate(a):
        if item == "?":
           a[index] = "i"
        elif item == "x":
           a[index = 10
    
    print a
    
    >>> a = ['1', '7', '?', '8', '5', 'x']
    >>> reps = {'?': 'i', 'x': 10}
    >>> b = [reps.get(x,x) for x in a]
    >>> b
    ['1', '7', 'i', '8', '5', 10]
    
    该方法非常有用,并且比if/elif链更具可扩展性。

    您现在可以使用lambda

    # replace occurrences of ?
    a = map(lambda x: i if x == '?' else x, a)
    # replace occurrences of x
    a = list(map(lambda x: 10 if x == 'x' else x, a))
    
    当你说“键和值”时,你实际上是指索引和值吗?键/值对用于dict,而不是列表。