Python循环:迭代不完全

2024-05-19 23:02:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用以下函数来改变两个列表的元素: 如果列表元素以“U”开头,则该元素应变为“1”,否则该列表元素应变为“0”。 代码如下:

def measure(p):
    for x in range(len(p)):
        if p[x][0] == 'U':
            p[x] = 1
        else:
            p[x] = 0
        return p

print measure(['Dave','Sebastian','Katy'])
print measure(['Umika','Umberto'])

正确的结果应该是

[0, 0, 0]
[1, 1]

但目前的代码产生:

[0, 'Sebastian', 'Katy']
[1, 'Umberto']

似乎迭代在第一个元素之后停止了。我怎样才能解决这个问题?你知道吗


Tags: 函数代码in元素列表forlenif
3条回答

函数在第一个循环之后终止,因为在该循环中有一个无条件返回。将回路移到回路外侧。你知道吗

def measure(p):
    for x in range(len(p)):
        if p[x][0] == 'U':
            p[x] = 1
        else:
            p[x] = 0
    return p

print measure(['Dave','Sebastian','Katy'])
print measure(['Umika','Umberto'])

结果:

[0, 0, 0]
[1, 1]

要知道return在执行函数时总是终止函数。在for循环的第一个循环中,函数执行return语句并结束函数measure。这就是为什么只有p的第一个元素被更改为0或1。你知道吗

只需将return语句放在for循环之外

def measure(p):
    for x in range(len(p)):
        if p[x][0] == 'U':
            p[x] = 1
        else:
            p[x] = 0
    return p

另外,您的函数非常简单,可以用一行代码编写,如下所示:

def f(L):
    return [1 if elt[0].lower() == "u" else 0 for elt in L]

f(['Umika','Umberto'])
Out[27]: [1, 1]

f(['Dave','Sebastian','Katy'])
Out[28]: [0, 0, 0]

相关问题 更多 >