鱼C论坛

 找回密码
 立即注册
查看: 11979|回复: 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 | 显示全部楼层
def change(x):
    a=str(x)[1:-1]
    a=(a[-1]+a[:-1]).replace(', ','')
    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 | 显示全部楼层
def new_list(lst):
    new = [(lst[-1]%10)*10+lst[0]//10]
    for i in range(len(lst)-1):
        new.append((lst[i]%10)*10+lst[i+1]//10)
    return new

评分

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

查看全部评分

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

使用道具 举报

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


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

b = change(a)

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

使用道具 举报

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

    return result

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

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

L3 = [2103, 4512, 5210, 3545, 2587, 5698, 4512]
l3 = Fun(L3)
print(l3)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-19 23:53:40 | 显示全部楼层
def fun(list1):
    list2=[]
    for i in range(len(list1)):
        if i==0:
            list2.append(list1[len(list1)-1]%10*10+list1[i]//10)
        else:
            list2.append(list1[i-1]%10*10+list1[i]//10)
    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 | 显示全部楼层
#给定列表
list1 = [33,54,29,75,83,15,38,30,88,15]
#空列表用于把list1转换成字符串
list2 = []
#用于接收返回的最终结果列表
list3 = []
def temp(list1):
    #把int转换成str类型
    for i in list1:
        i = str(i)
        list2.append(i)
    #转换成长字符串
    str1 = ''.join(list2)
    #把最后一个数字添加到第一个前面
    str2 = str1[-1]+str1[0:-1]
    #分割,两个一组,添加到list3
    for i in range(0,30,2):
        if len(str2[i:i+2]) != 0:    
            list3.append(str2[i:i+2])
    print(list3)
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中的数字,添加多位或减少数字
list1 = [33, 54, 29, 75, 83, 15, 38, 30, 88, 15]
list2 = []
list3 = []
list4 = []
def number():
    count = -1
    for i in range(len(list1)):
        for x in range(2):
            list2.append(str(list1[i])[x:x+1])
    try:
        for y in range(len(list2)):
            count += 1
            if y < 1:
                list3.append(list2[count])
            elif y <= 1:
                list3.append(list2[count]+list2[count+1])
            elif 3<y<len(list2)-3 :
                count += 1
                if count < len(list2)-3:
                    list3.append(list2[count] + list2[count + 1])
            elif y >= len(list2)-3:
                list3.append(list2[y] + list2[y + 1] + list2[y+2])
    except IndexError:
        pass
    list5 = []
    list4 = ''.join(list3[-1:])[-1:]
    list4 = (list4+list3[0]).split()
    for b in range(len(list3)):
        if 1<= b < len(list3)-1:
            list4.append(list3[b])
        else:
            list5.append(list3[b][:2])
    list4.append(''.join(list5[1:]))
    print([int(c) for c in list3])
    print([int(d) for d in list4])
number()

评分

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

查看全部评分

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

使用道具 举报

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

    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 编辑

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

def func(data):
    result = []
    length = len(data)
    for i in range(length):
        if i == length - 1:
            result.append(int(str(data[i])[-1]+str(data[0])[:-1]))
        else:
            result.append(int(str(data[i])[-1]+str(data[i+1])[:-1]))
    result.insert(0, result.pop())
    return result
    
print(func(data))

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

def func(data):
    x = [str(j) for j in data]
    a = []
    for i in x:
        a.append(i[:-1])
        a.append(i[-1])
    a.insert(0, a.pop())
    length = len(a)
    result = []
    for i in range(0, length, 2):
        result.append(int(a[i]+a[i+1]))
    return result
    
print(func(data)))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-20 08:32:04 | 显示全部楼层
本帖最后由 天圆突破 于 2018-3-20 10:46 编辑
def change(lst):
    string = ''.join(str(lst)[1:-1].replace(' ','').split(','))
    string = int(string[-1]+string[:-1])
    res = list()
    while string > 0:
        res.insert(0, string%100)
        string //= 100
    return res
更简洁点的方法:
from functools import reduce
def change(lst):
    string = reduce(lambda x,y:x+y, map(lambda x:str(x)[0]+' '+str(x)[1], lst))
    string = (string[-1]+string[:-1])[:-1]
    res = list(map(lambda x: int(x), string.split(' ')))
    return res
if __name__ == '__main__':
    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 | 显示全部楼层
import random

def fun(b):
    c = []
    q = 0
    b.insert(0,b[9])
    
    for m in b:
        x = m//10
        y = x + q * 10
        q = m - x*10 
        c.append(y)
        
    
    return c[1:]
        
        


def main():
    b = []

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

    print('原列表',b)
    c = fun(b)
    print('新列表',c)

if __name__ == '__main__':
    main()

评分

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

查看全部评分

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

使用道具 举报

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

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

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

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



        return result

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

***Repl Closed***

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-20 09:25:10 | 显示全部楼层
'''
已知一个都是由两位数组成的列表(这里是为了简单些,其实可以改为都是由大于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最终的结果,参数为一个两位数组成列表,返回值仍是一个列表。
'''
def count_bit(num):
    return len(list(str(num)))

#多位数的
def moveDHfunc(L):
    for i in range(len(L)-1):
        m=L[i]//10
        n=L[i]%10
        L[i]=m
        L[i+1]=n*(10**(count_bit(L[i+1])))+L[i+1]
    m=L[-1]//10
    n=L[-1]%10
    L[-1]=m
    L[0]=n*(10**(count_bit(L[0])))+L[0]
    return L
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 | 显示全部楼层
def func(list1):
    s1 = ''.join([str(i) for i in list1])
    s2 = s1[-1] + s1[:-1]
    return [int(s2[i:i + 2]) for i in range(0, len(s2), 2)]


l1 = [33, 54, 29, 75, 83, 15, 38, 30, 88, 15]
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 | 显示全部楼层
# ! /urs/bin/env python
# coding=utf-8
# __author__ = 'bang'  CreateDate:2018/3/20


def change_list(numlist):
    for i in range(len(numlist)):
        numlist[i] = str(numlist[i])
    str_list = ''.join(numlist)
    new_list = [str_list[0]]
    for k in range(1, len(numlist)-1):
        new_list.append(str_list[2 * k - 1: 2 * k + 1])
    new_list.append(str_list[-3:])
    for j in range(len(new_list)):
        new_list[j] = int(new_list[j])
    new_list[0] += new_list[-1] % 10 * 10
    new_list[-1] = new_list[-1] / 10
    return new_list


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-11-16 20:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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