Python 我想知道如何将数字添加到列表中。说数字是10。我需要它来添加1+;0添加到新列表
我想知道如何将数字添加到列表中。说数字是10。我需要它将1+0添加到新列表中。如果列表中的项目为11,则需要向列表中添加2Python 我想知道如何将数字添加到列表中。说数字是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
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
不会