Python序列(元组)

时间:2017-09-20 05:02:15

标签: python

编写一个函数square_odd_terms,它接受一个元组作为参数,并在元组平方中返回一个奇数项的元组。即使条款也会保持不变。

我的尝试是:

public async Task<ActionResult> DoJob(int id)
{
    await Task.Delay(TimeSpan.FromSeconds(15));
    return ThreadInfo();
}

任何帮助?

尝试2:

def square_odd_termms(tpl):
    for i in (tpl):
        if i%2==0:
            return i
        else:
            return i**2
    return tuple(i)

4 个答案:

答案 0 :(得分:4)

如果数字是奇数平方,则使用生成器理解,否则只保留数字。

def square_odd_termms(tpl):
    return tuple((num**2 if num%2 else num for num in tpl))

>>> square_odd_termms((1,2,3,4,5,6))
(1, 2, 9, 4, 25, 6)

回答您的尝试2:您不应该在&#34;中返回值。和&#34;否则&#34;在那里停止功能流动的条件。而是声明一个空数组,为该数组分配这些值并在结尾返回

def square_odd_terms(tp1):
    result = []
    for num in tp1:
        if num%2 != 0:
            result.append(num**2)
        else:
            result.append(num)
    return tuple(result)

答案 1 :(得分:1)

你很亲密。但是,您第一次尝试的return语句会使函数短路。执行此操作的一种简单方法是迭代任何可迭代(元组,列表等)并将新项添加到新元组。

以下是tuple concatenation的示例:

def square_odd_terms(iterable):
    result = tuple()
    for i in iterable:
        if i % 2 != 0:
            result += (i**2,)
        else:
            result += (i,)
    return result


numbers = (3, 6, 9, 10, 12)
square_odd_terms(numbers)
# (9, 6, 81, 10, 12)

下一个级别可能是generator yields每个元素并转换为元组:

def square_odd_terms(iterable):
    """Yield squared odds and unchanged evens."""
    for i in iterable:
        if i % 2 != 0:
            yield i**2
        else:
            yield i


tuple(square_odd_terms(numbers))
# (9, 6, 81, 10, 12)

接下来,您可以使用generator expression强制转换为tuple()模仿后者:

def square_odd_terms(iterable):
    """Return a tuple of squared odds and unchanged evens."""
    return tuple(i**2 if i % 2!=0 else i for i in iterable)


square_odd_terms(numbers)
# (9, 6, 81, 10, 12)

答案 2 :(得分:0)

f=lambda x: map(lambda i: i**2 if i%2 else i,x)

<强>输出:

>>> t=(1,2,5,4)
>>> f=lambda x: tuple(map(lambda i: i**2 if i%2 else i,x))
>>> f(t)
(1, 2, 25, 4)
>>>

答案 3 :(得分:-1)

修改你的尝试2:

def S_O(a):

l = []
for i in a:
    if i%2 != 0:
        l.append(i**2)
    else:
        l.append(i)
return tuple(l)

返回元组

执行你的程序两次。你会知道默认args有什么问题。

>>> S_O((1,2,3))
(1, 2, 9)
>>> S_O((1,2,3,4))
(1, 2, 9, 1, 2, 9, 4)