鱼C论坛

 找回密码
 立即注册
查看: 9528|回复: 65

[技术交流] Python:每日一题 167

[复制链接]
发表于 2018-3-19 22:12:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冬雪雪冬 于 2018-3-22 18:32 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。开始阶段是看不到其他人的回帖的,等答题完成,开始评分时再取消限制。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
已知一个都是由两位数组成的列表(这里是为了简单些,其实可以改为都是由大于1位的多位数组成),例如[33, 54, 29, 75, 83, 15, 38, 30, 88, 15],现在要把逗号左移一位(不算空格)成为[3, 35, 42, 97, 58, 31, 53, 83, 8, 815],然后将最后的“5”移到第一个数的前面,得到[53, 35, 42, 97, 58, 31, 53, 83, 8, 81]。
要求编写一个函数return最终的结果,参数为一个两位数组成列表,返回值仍是一个列表。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-19 22:32:27 | 显示全部楼层
  1. def change(x):
  2.     a=str(x)[1:-1]
  3.     a=(a[-1]+a[:-1]).replace(', ','')
  4.     return [int(a[i:i+2]) for i in range(0,len(a),2)]
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 22:39:31 From FishC Mobile | 显示全部楼层
def shift_left_comma(array):  #传入一个都是由两位数组成的列表
    array2 = []  #将传入列表中的数据个十位拆开,存入新的列表中
    for i in range(len(array)):
        array2.append(array[i]//10)  #将十位数写入
        array2.append(array[i]%10)  #将个位数写入

    array3 = []
    for i in range(1, len(array2)-1, 2):
        array3.append((array2[i]*10+array2[i+1]))

    array3.insert(0, (array2[0]+array2[len(array2)-1]*10))

    return array3


list1 = [33, 54, 29, 75, 83, 15, 38, 30, 88, 15]

print(shift_left_comma(list1))
#电脑连不上网,手机发的,没有看见编辑代码的选项,很抱歉对楼主的阅读造成不便

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 22:43:35 | 显示全部楼层
  1. def new_list(lst):
  2.     new = [(lst[-1]%10)*10+lst[0]//10]
  3.     for i in range(len(lst)-1):
  4.         new.append((lst[i]%10)*10+lst[i+1]//10)
  5.     return new
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-3-19 22:58:53 | 显示全部楼层
  1. def change(x):
  2.     str_list = ''
  3.     result = []
  4.     for a in x:
  5.         str_list +=str(a)
  6.     str_change = str_list[len(str_list) - 1:] + str_list[:len(str_list) - 1]
  7.     index = 0
  8.     while (index + 2) <= len(str_change):
  9.         result.append(int(str_change[index:index + 2]))
  10.         index += 2
  11.     return result
  12.    


  13. a = [33, 54, 29, 75, 83, 15, 38, 30, 88, 15]

  14. b = change(a)

  15. print(b)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 23:34:58 | 显示全部楼层
  1. def Fun(List):
  2.     n = len(str(List[0]))
  3.     string = ''.join([str(i) for i in List])
  4.     L = string[-1] + string[:-1]
  5.     result = [int(L[i:i+n]) for i in range(0, len(L), n)]

  6.     return result

  7. L1 = [333, 545, 293, 753, 836, 155, 385, 301, 882, 150]
  8. l1 = Fun(L1)
  9. print(l1)

  10. L2 = [33, 54, 29, 75, 83, 15, 38, 30, 88, 15]
  11. l2 = Fun(L2)
  12. print(l2)

  13. L3 = [2103, 4512, 5210, 3545, 2587, 5698, 4512]
  14. l3 = Fun(L3)
  15. print(l3)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-3-19 23:53:40 | 显示全部楼层
  1. def fun(list1):
  2.     list2=[]
  3.     for i in range(len(list1)):
  4.         if i==0:
  5.             list2.append(list1[len(list1)-1]%10*10+list1[i]//10)
  6.         else:
  7.             list2.append(list1[i-1]%10*10+list1[i]//10)
  8.     return list2
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 00:13:08 | 显示全部楼层
def fun(list1):
    temp=0
    leng=len(list1)
    for i in range(leng) :
        list1[i]=int(str(temp)+str(list1[i]))
        temp=list1[i] % 10
        list1[i]=list1[i]//10
    list1[0]+=temp*10
    return list1

lis=input()
lis=lis[1:len(lis)-1]
list1=lis.split(',')
for i in range(len(list1)):
    list1[i]=int(list1[i])
print(fun(list1))

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 00:24:22 | 显示全部楼层
list1 = [33, 54, 29, 75, 83, 15, 38, 30, 88, 15]

def left_Shift(list):
    list1 = []
    length = len(list)
    for i in range(1,length-1):
        list1.append(list[i]//10+list[i-1]%10*10)

    list1.insert(0,list[0]//10+list[length-1]%10*10)
    list1.insert(length-1,list[length-1]//10+list[length-2]%10*10)

    return list1

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 00:25:22 | 显示全部楼层
  1. #给定列表
  2. list1 = [33,54,29,75,83,15,38,30,88,15]
  3. #空列表用于把list1转换成字符串
  4. list2 = []
  5. #用于接收返回的最终结果列表
  6. list3 = []
  7. def temp(list1):
  8.     #把int转换成str类型
  9.     for i in list1:
  10.         i = str(i)
  11.         list2.append(i)
  12.     #转换成长字符串
  13.     str1 = ''.join(list2)
  14.     #把最后一个数字添加到第一个前面
  15.     str2 = str1[-1]+str1[0:-1]
  16.     #分割,两个一组,添加到list3
  17.     for i in range(0,30,2):
  18.         if len(str2[i:i+2]) != 0:   
  19.             list3.append(str2[i:i+2])
  20.     print(list3)
  21. temp(list1)        
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2 要求是得到数字列表

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 00:32:19 | 显示全部楼层
def move(list1):
    list2 = []
    list2.append(int(list1[-1]) % 10 * 10 + int(list1[0]) // 10)
    for i in range(len(list1) - 1):
        list2.append(int(list1[i]) % 10 * 10 + int(list1[i + 1]) // 10)
    print(list2)
list1 = [33,54,29,75,83,15,38,30,88,15]
move(list1)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 00:57:03 | 显示全部楼层
本帖最后由 晓屁屁 于 2018-3-20 08:54 编辑

#可以随意改变list1中的数字,添加多位或减少数字
  1. list1 = [33, 54, 29, 75, 83, 15, 38, 30, 88, 15]
  2. list2 = []
  3. list3 = []
  4. list4 = []
  5. def number():
  6.     count = -1
  7.     for i in range(len(list1)):
  8.         for x in range(2):
  9.             list2.append(str(list1[i])[x:x+1])
  10.     try:
  11.         for y in range(len(list2)):
  12.             count += 1
  13.             if y < 1:
  14.                 list3.append(list2[count])
  15.             elif y <= 1:
  16.                 list3.append(list2[count]+list2[count+1])
  17.             elif 3<y<len(list2)-3 :
  18.                 count += 1
  19.                 if count < len(list2)-3:
  20.                     list3.append(list2[count] + list2[count + 1])
  21.             elif y >= len(list2)-3:
  22.                 list3.append(list2[y] + list2[y + 1] + list2[y+2])
  23.     except IndexError:
  24.         pass
  25.     list5 = []
  26.     list4 = ''.join(list3[-1:])[-1:]
  27.     list4 = (list4+list3[0]).split()
  28.     for b in range(len(list3)):
  29.         if 1<= b < len(list3)-1:
  30.             list4.append(list3[b])
  31.         else:
  32.             list5.append(list3[b][:2])
  33.     list4.append(''.join(list5[1:]))
  34.     print([int(c) for c in list3])
  35.     print([int(d) for d in list4])
  36. number()
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 02:08:47 | 显示全部楼层
本帖最后由 8306最硬 于 2018-3-20 18:58 编辑
  1. def fun(lst):
  2.     return [lst[i-1]%10*10 + lst[i]//10 for i in range(len(lst))]
复制代码
  1. def fun(lst):
  2.     lst = [list(str(i)) for i in lst]
  3.     for i in range(len(lst)):
  4.         lst[i].insert(0, lst[i - 1].pop())

  5.     return [int(''.join(i)) for i in lst]
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 08:21:14 | 显示全部楼层
本帖最后由 shigure_takimi 于 2018-3-20 08:35 编辑


  1. ##  方法一:直接一次循环。
  2. data = [33, 54, 29, 75, 83, 15, 38, 30, 88, 15]

  3. def func(data):
  4.     result = []
  5.     length = len(data)
  6.     for i in range(length):
  7.         if i == length - 1:
  8.             result.append(int(str(data[i])[-1]+str(data[0])[:-1]))
  9.         else:
  10.             result.append(int(str(data[i])[-1]+str(data[i+1])[:-1]))
  11.     result.insert(0, result.pop())
  12.     return result
  13.    
  14. print(func(data))

  15. ##  方法二:啰嗦些。
  16. data = [33, 54, 29, 75, 83, 15, 38, 30, 88, 15]

  17. def func(data):
  18.     x = [str(j) for j in data]
  19.     a = []
  20.     for i in x:
  21.         a.append(i[:-1])
  22.         a.append(i[-1])
  23.     a.insert(0, a.pop())
  24.     length = len(a)
  25.     result = []
  26.     for i in range(0, length, 2):
  27.         result.append(int(a[i]+a[i+1]))
  28.     return result
  29.    
  30. print(func(data)))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 08:32:04 | 显示全部楼层
本帖最后由 天圆突破 于 2018-3-20 10:46 编辑
  1. def change(lst):
  2.     string = ''.join(str(lst)[1:-1].replace(' ','').split(','))
  3.     string = int(string[-1]+string[:-1])
  4.     res = list()
  5.     while string > 0:
  6.         res.insert(0, string%100)
  7.         string //= 100
  8.     return res
复制代码

更简洁点的方法:
  1. from functools import reduce
  2. def change(lst):
  3.     string = reduce(lambda x,y:x+y, map(lambda x:str(x)[0]+' '+str(x)[1], lst))
  4.     string = (string[-1]+string[:-1])[:-1]
  5.     res = list(map(lambda x: int(x), string.split(' ')))
  6.     return res
复制代码

  1. if __name__ == '__main__':
  2.     print(change([33, 54, 29, 75, 83, 15, 38, 30, 88, 15]))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 09:02:25 | 显示全部楼层
  1. import random

  2. def fun(b):
  3.     c = []
  4.     q = 0
  5.     b.insert(0,b[9])
  6.    
  7.     for m in b:
  8.         x = m//10
  9.         y = x + q * 10
  10.         q = m - x*10
  11.         c.append(y)
  12.         
  13.    
  14.     return c[1:]
  15.         
  16.         


  17. def main():
  18.     b = []

  19.     #生成b数列,每项均为随机的二位数
  20.     for i in range(10):
  21.         b.append(random.randint(10,100))

  22.     print('原列表',b)
  23.     c = fun(b)
  24.     print('新列表',c)

  25. if __name__ == '__main__':
  26.     main()
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 09:02:30 | 显示全部楼层
  1. def transform(list1):
  2.         temp1 = []
  3.         temp2 = []
  4.         for each in list1:
  5.                 first_bit = each // 10
  6.                 temp1.append(str(first_bit))

  7.                 second_bit = each % 10
  8.                 temp2.append(str(second_bit))

  9.         result = []
  10.         for i in range(1,len(temp2)):
  11.                 result.append(int(temp2[i-1]+temp1[i]))

  12.         result.insert(0,int(temp2[len(temp2)-1] + temp1[0]))



  13.         return result

  14. if __name__ == '__main__':
  15.         list1 = [33, 54, 29, 75, 83, 15, 38, 30, 88, 15]
  16.         result = transform(list1)
  17.         print(result)
  18. 运行结果:
  19. [53, 35, 42, 97, 58, 31, 53, 83, 8, 81]

  20. ***Repl Closed***
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 09:25:10 | 显示全部楼层
  1. '''
  2. 已知一个都是由两位数组成的列表(这里是为了简单些,其实可以改为都是由大于1位的多位数组成)
  3. 例如[33, 54, 29, 75, 83, 15, 38, 30, 88, 15]
  4. 现在要把逗号左移一位(不算空格)成为[3, 35, 42, 97, 58, 31, 53, 83, 8, 815]
  5. 然后将最后的“5”移到第一个数的前面,得到[53, 35, 42, 97, 58, 31, 53, 83, 8, 81]。
  6. 要求编写一个函数return最终的结果,参数为一个两位数组成列表,返回值仍是一个列表。
  7. '''
  8. def count_bit(num):
  9.     return len(list(str(num)))

  10. #多位数的
  11. def moveDHfunc(L):
  12.     for i in range(len(L)-1):
  13.         m=L[i]//10
  14.         n=L[i]%10
  15.         L[i]=m
  16.         L[i+1]=n*(10**(count_bit(L[i+1])))+L[i+1]
  17.     m=L[-1]//10
  18.     n=L[-1]%10
  19.     L[-1]=m
  20.     L[0]=n*(10**(count_bit(L[0])))+L[0]
  21.     return L
  22. print(moveDHfunc([33, 54, 29, 75, 83, 15, 38, 30, 88, 15]))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 09:42:37 | 显示全部楼层
  1. def func(list1):
  2.     s1 = ''.join([str(i) for i in list1])
  3.     s2 = s1[-1] + s1[:-1]
  4.     return [int(s2[i:i + 2]) for i in range(0, len(s2), 2)]


  5. l1 = [33, 54, 29, 75, 83, 15, 38, 30, 88, 15]
  6. print(func(l1))
复制代码


结果:
[53, 35, 42, 97, 58, 31, 53, 83, 8, 81]

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 10:02:11 | 显示全部楼层
  1. # ! /urs/bin/env python
  2. # coding=utf-8
  3. # __author__ = 'bang'  CreateDate:2018/3/20


  4. def change_list(numlist):
  5.     for i in range(len(numlist)):
  6.         numlist[i] = str(numlist[i])
  7.     str_list = ''.join(numlist)
  8.     new_list = [str_list[0]]
  9.     for k in range(1, len(numlist)-1):
  10.         new_list.append(str_list[2 * k - 1: 2 * k + 1])
  11.     new_list.append(str_list[-3:])
  12.     for j in range(len(new_list)):
  13.         new_list[j] = int(new_list[j])
  14.     new_list[0] += new_list[-1] % 10 * 10
  15.     new_list[-1] = new_list[-1] / 10
  16.     return new_list


  17. print change_list([33, 54, 29, 75, 83, 15, 38, 30, 88, 15])
复制代码


偷了点懒,直接是针对2位数的。

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 06:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表