Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我想知道如何将数字添加到列表中。说数字是10。我需要它来添加1+;0添加到新列表_Python - Fatal编程技术网

Python 我想知道如何将数字添加到列表中。说数字是10。我需要它来添加1+;0添加到新列表

Python 我想知道如何将数字添加到列表中。说数字是10。我需要它来添加1+;0添加到新列表,python,Python,我想知道如何将数字添加到列表中。说数字是10。我需要它将1+0添加到新列表中。如果列表中的项目为11,则需要向列表中添加2 def main(): #Define List mylist = [4,5,5,2,7,2,0,4,1,2,3,4,5,6,7,8] print(mylist) newlist = [] for each in mylist: if (each % 2 == 0): newlist.appe

我想知道如何将数字添加到列表中。说数字是10。我需要它将1+0添加到新列表中。如果列表中的项目为11,则需要向列表中添加2

def main():
    #Define List
    mylist = [4,5,5,2,7,2,0,4,1,2,3,4,5,6,7,8]

    print(mylist)
    newlist = []
    for each in mylist:
        if (each % 2 == 0):
            newlist.append(each)
        else:
            newlist.append(each + each)
        for each in newlist:
            if each >= 10:
                newlist.append(each + each)

    print(newlist)

main()
试试这个:

对给定数字的数字求和的函数:

def sum_of_digits(num):
    return sum([int(x) for x in str(num)])
以及将其应用于整个列表的列表理解:

newlist=[sum_of_digits(number) for number in mylist]
试试这个:

对给定数字的数字求和的函数:

def sum_of_digits(num):
    return sum([int(x) for x in str(num)])
以及将其应用于整个列表的列表理解:

newlist=[sum_of_digits(number) for number in mylist]

要获得数字的数字和,应将数字转换为字符串,循环字符串,并将所有字符相加(再次转换为int后):

要对数字列表执行此操作,应使用列表理解:

>>my_nums = [11, 22, 56, 345]
>>digit_sums = [get_digit_sum(x) for x in my_nums]
>>print(digit_sums)
[2, 4, 11, 12]
这也可以在一个表达式中实现:

>>my_nums = [11, 22, 56, 345]
>>digit_sums = [sum(int(x) for x in str(num)) for num in my_nums]
根据abarnet的评论,您可能希望将编号
345
转换为
3+4+5=12
,并将编号
12
转换为
1+2=3
。这可以使用递归实现。通过使用
max_digits
参数,可以指定返回数字的最大位数

def get_digit_sum(num, max_digits=1):
    d = sum(int(x) for x in str(num))
    if len(str(d)) > max_digits:
        return get_digit_sum(d)
    return d
或者再短一点:

def get_digit_sum(num, max_digits=1):
    d = sum(int(x) for x in str(num))
    return get_digit_sum(d) if len(str(d)) > max_digits else d
然后,上述两种功能将产生:

>>my_nums = [11, 22, 56, 345]
>>print [get_digit_sum(x) for x in my_nums]
[2, 4, 2, 3]

要获得数字的数字和,应将数字转换为字符串,循环字符串,并将所有字符相加(再次转换为int后):

要对数字列表执行此操作,应使用列表理解:

>>my_nums = [11, 22, 56, 345]
>>digit_sums = [get_digit_sum(x) for x in my_nums]
>>print(digit_sums)
[2, 4, 11, 12]
这也可以在一个表达式中实现:

>>my_nums = [11, 22, 56, 345]
>>digit_sums = [sum(int(x) for x in str(num)) for num in my_nums]
根据abarnet的评论,您可能希望将编号
345
转换为
3+4+5=12
,并将编号
12
转换为
1+2=3
。这可以使用递归实现。通过使用
max_digits
参数,可以指定返回数字的最大位数

def get_digit_sum(num, max_digits=1):
    d = sum(int(x) for x in str(num))
    if len(str(d)) > max_digits:
        return get_digit_sum(d)
    return d
或者再短一点:

def get_digit_sum(num, max_digits=1):
    d = sum(int(x) for x in str(num))
    return get_digit_sum(d) if len(str(d)) > max_digits else d
然后,上述两种功能将产生:

>>my_nums = [11, 22, 56, 345]
>>print [get_digit_sum(x) for x in my_nums]
[2, 4, 2, 3]

看起来您的代码试图做的比您描述的稍微多一些——特别是,您可以将任何奇数加倍。因为你对每个数字做了两件事(可能是两位数,求和),所以在两个步骤都完成之前,你不想把它放在列表中。相反,你可以这样做:

for each in mylist:
    if each % 2 != 0:
        each *= 2
    if each >= 10:
        each = # sum of digits
    newlist.append(each)
有几种方法可以对数字求和。您可以使用
divmod
获得商和数字的余数除以10-余数是单位列,商是该列左侧的每一列:

if each >= 10:
    q, r = divmod(each, 10)
    each = q + r
另一种方法是获取字符串表示形式,它允许您迭代每个数字,将其转换回数字并添加它们:

if each >= 10:
   each = sum(int(d) for d in str(each))
这可能更容易理解,但是速度要慢一点——如果您有大量的输入,这可能很重要

如果列表中有任何三位或更多的数字,这两种方法的工作方式会有所不同-对于110,divmod版本将执行11+0=11,而字符串版本将执行1+1+0=2

还要注意的是,这两种方法都不能保证最后都是一位数字——对于99,这两种方法都会得到18。如果希望将其进一步减少到9,可以将
If
更改为循环:

while each >= 10:
   each = sum(int(d) for d in str(each))
要对divmod版本执行此操作,可以将其放入递归函数中:

def digit_sum(number):
    q, r = divmod(number, 10)
    if q > 10:
       q = digit_sum(q)
    return q+r

在我尝试过的每种情况下,对
divmod
版本进行与字符串版本相同的更改似乎都会给出相同的答案,但我不知道这是否一定是真的。

看起来您的代码试图做的比您描述的稍微多一些-特别是,您将任何奇数加倍。因为你对每个数字做了两件事(可能是两位数,求和),所以在两个步骤都完成之前,你不想把它放在列表中。相反,你可以这样做:

for each in mylist:
    if each % 2 != 0:
        each *= 2
    if each >= 10:
        each = # sum of digits
    newlist.append(each)
有几种方法可以对数字求和。您可以使用
divmod
获得商和数字的余数除以10-余数是单位列,商是该列左侧的每一列:

if each >= 10:
    q, r = divmod(each, 10)
    each = q + r
另一种方法是获取字符串表示形式,它允许您迭代每个数字,将其转换回数字并添加它们:

if each >= 10:
   each = sum(int(d) for d in str(each))
这可能更容易理解,但是速度要慢一点——如果您有大量的输入,这可能很重要

如果列表中有任何三位或更多的数字,这两种方法的工作方式会有所不同-对于110,divmod版本将执行11+0=11,而字符串版本将执行1+1+0=2

还要注意的是,这两种方法都不能保证最后都是一位数字——对于99,这两种方法都会得到18。如果希望将其进一步减少到9,可以将
If
更改为循环:

while each >= 10:
   each = sum(int(d) for d in str(each))
要对divmod版本执行此操作,可以将其放入递归函数中:

def digit_sum(number):
    q, r = divmod(number, 10)
    if q > 10:
       q = digit_sum(q)
    return q+r

在我尝试过的每种情况下,对
divmod
版本进行与字符串版本相同的更改似乎都会给出相同的答案,但我不知道这是否一定会发生。

我相信我知道你的目的。如果值为偶数且小于10,则将其添加到新列表中;如果值为奇数,则将其加倍;如果值小于10,则将其添加到新列表中。现在,如果该值大于10,则取所有数字之和,并将其添加到列表中

我相信有更好的方法可以做到这一点,但这就是我想到的

list = [4,5,5,2,7,2,0,4,1,2,3,4,5,6,7,8]
newlist = []
for i in list:
    if i % 2 == 0 and len(str(i)) > 1:
        newlist.append(sum([int(x) for x in str(i)]))
    elif i % 2 == 0:
        newlist.append(i)
    elif len(str(i*2)) > 1:
        newlist.append(sum([int(x) for x in str(i*2)]))
    else:
        newlist.append(i*2)

print newlist

input:   [4, 5, 5, 2, 7, 2, 0, 4, 1, 2, 3, 4, 5, 6, 7, 8]
outcome: [4, 1, 1, 2, 5, 2, 0, 4, 2, 2, 6, 4, 1, 6, 5, 8]

我相信我知道你想要什么。如果值为偶数且小于10,则将其添加到新列表中;如果值为奇数,则将其加倍;如果值小于10,则将其添加到新列表中。现在,如果该值大于10,则取所有数字之和,并将其添加到列表中

我相信有更好的方法可以做到这一点,但这就是我想到的

list = [4,5,5,2,7,2,0,4,1,2,3,4,5,6,7,8]
newlist = []
for i in list:
    if i % 2 == 0 and len(str(i)) > 1:
        newlist.append(sum([int(x) for x in str(i)]))
    elif i % 2 == 0:
        newlist.append(i)
    elif len(str(i*2)) > 1:
        newlist.append(sum([int(x) for x in str(i*2)]))
    else:
        newlist.append(i*2)

print newlist

input:   [4, 5, 5, 2, 7, 2, 0, 4, 1, 2, 3, 4, 5, 6, 7, 8]
outcome: [4, 1, 1, 2, 5, 2, 0, 4, 2, 2, 6, 4, 1, 6, 5, 8]

您的预期输出是什么?您的预期输出是什么?OP似乎在使用Python3.x,因此您的
newlist
不会