鱼C论坛

 找回密码
 立即注册
123
返回列表 发新帖
楼主: 冬雪雪冬

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

[复制链接]
发表于 2018-9-19 09:27:30 | 显示全部楼层
IChoose 发表于 2018-9-13 13:36
def gaps(a=[],b=[])
    gap = abs(float(a[0])- float(b[0]))
    for x in a:

是的。后来有人提议让输入一个列表也不人性化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-19 12:40:19 | 显示全部楼层
  1. list1 = [-62, 167, 121, 72, 57, -21, 129, 173, -80, 35]
  2. list2 = [12, -6, 39, -11, 197, -47, -90, 28, 51, 190]

  3. dictmin = {}
  4. for each1 in list1:
  5.     for each2 in list2:
  6.         abs_min = abs(each1-each2)
  7.         dictmin[abs_min] = [each1,each2]
  8. min_abs = min(dictmin.keys())
  9. print(dictmin[min_abs][0],dictmin[min_abs][1],min_abs)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-19 18:13:18 | 显示全部楼层
  1. import random as r

  2. def getnum():
  3.     s = []
  4.     while len(s) < 10:
  5.         i = r.choice(range(-999,999))
  6.         if i not in s:
  7.             s.append(i)
  8.     return s

  9. def comp(s1,s2):
  10.     result = []
  11.     for i in s1:
  12.         for j in s2:
  13.             a = i - j
  14.             if a < 0:
  15.                 a = -a
  16.             result.append([i,j,a])
  17.     min = result[0][2]
  18.     r = result[0]
  19.     for i in range(1,len(result)):
  20.         if result[i][2] < min:
  21.             min = result[i][2]
  22.             r = result[i]
  23.     return  r

  24. s1 = getnum()
  25. s2 = getnum()
  26. r = comp(s1,s2)
  27. print(s1)
  28. print(s2)
  29. print('结果',r[0],r[1],r[2])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-20 19:34:54 | 显示全部楼层
import random

list1 = []
list2 = []

for i in range(1,10):
    list1.append(random.randint(1,200))
    list2.append(random.randint(1,200))

num1 = random.choice(list1)
num2 = random.choice(list2)

if num1>num2:
    result = num1-num2
else:
    result = num2-num1

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

使用道具 举报

发表于 2018-9-27 22:18:38 | 显示全部楼层
print("请输入两组数据:")
num1 = eval(input())
num2 = eval(input())
list1 = list(num1)
list2 = list(num2)
list3 = []
a = len(list1)
b = len(list2)
c = 0
for i in range(0, a):
    for j in range(0, b):
        c = abs(list1[i] - list2[j])
        list3.append(c)
else:
    d = min(list3)
    for i in range(0, a):
        for j in range(0, b):
            c = abs(list1[i] - list2[j])
            if(c == d):
                print(list1[i], list2[j], d)
                break;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-28 10:27:05 | 显示全部楼层
grf1973 发表于 2018-9-13 11:20
#提高一下效率:先把两个数组合并起来排个序。如果相邻数据在不同的原数组,判断其是否可能是最小值。
a=[ ...

这个方法好,我也想到这儿了。不过我只是初学,自己写不出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-11 16:45:21 | 显示全部楼层
  1. # -*- coding:utf-8 -*-
  2. def fun(x, y):
  3.     temp = -1
  4.     M = -1
  5.     N = -1
  6.     min_abs= abs(x[0]-y[0])
  7.     for m in x:
  8.         for n in y:
  9.             temp = abs(m - n)
  10.             if temp <= min_abs:
  11.                 min_abs=temp
  12.                 M = m
  13.                 N = n
  14.     return M, N, min_abs
  15. list1=[-62, 167, 121, 72, 57, -21, 129, 173, -80, 35]
  16. list2=[12, -6, 39, -11, 197, -47, -90, 28, 51, 190]
  17. print(fun(list1,list2))

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

使用道具 举报

发表于 2018-10-17 00:52:55 | 显示全部楼层
def func(alist,blist):
    dic={'{} {}'.format(x,y):abs(x-y) for x in alist for y in blist}
    return '{}'.format(min(dic.items(),key=lambda x:x[1]))

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

使用道具 举报

发表于 2018-10-17 01:01:11 | 显示全部楼层

用python的字典简单明了。
a=[-62, 167, 121, 72, 57, -21, 129, 173, -80, 35]
b=[12, -6, 39, -11, 197, -47, -90, 28, 51, 190]
def func(alist,blist):
    dic={'{} {}'.format(x,y):abs(x-y) for x in alist for y in blist}
    return '{}'.format(min(dic.items(),key=lambda x:x[1]))

print(func(a,b))

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

使用道具 举报

发表于 2018-10-17 01:03:20 | 显示全部楼层
Legend丶Hu 发表于 2018-9-12 23:00
>>>
==================== RESTART: C:%users\**\Desktop\test.py ====================
43,43,0

我看了这一题的答案,你用了dict,我觉的比较靠谱。
我的答案,你参考一下。
a=[-62, 167, 121, 72, 57, -21, 129, 173, -80, 35]
b=[12, -6, 39, -11, 197, -47, -90, 28, 51, 190]
def func(alist,blist):
    dic={'{} {}'.format(x,y):abs(x-y) for x in alist for y in blist}
    return '{}'.format(min(dic.items(),key=lambda x:x[1]))

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

使用道具 举报

发表于 2018-11-1 09:41:31 | 显示全部楼层
喜欢吃菠菜 发表于 2018-10-17 01:01
用python的字典简单明了。
a=[-62, 167, 121, 72, 57, -21, 129, 173, -80, 35]
b=[12, -6, 39, -11, 1 ...

额,我这台电脑上没有装Python,最近有点忙,没上鱼C。
Python的工具很多,Python也更讲究简洁,我接触Python的时间少,做题主要是锻炼思维,很多时候确实没有做到简洁,如果你的解答是正确的,那你确实比我强
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-25 22:54:35 | 显示全部楼层
list1=[-27, 184, 76, 193, 30, -96, 186, -61, 43, -94]
list2=[166, 28, 47, 83, 15, 26, 153, 188, 43, 110]

n_list=[]
for i in list1:
    for j in list2:
        n = abs(i-j)
        n_list.append((n,i,j))
n_list.sort()
print(n_list[0])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-11 19:49:35 | 显示全部楼层
本帖最后由 Roleplay 于 2018-12-11 20:00 编辑

lis0=[-27, 184, 76, 193, 30, -96, 186, -61, 43, -94]
lis1=[166, 28, 47, 83, 15, 26, 153, 188, 43, 110]
len0=len(lis0)
len1=len(lis1)
diff=[]
diff0=[]
for i in range(len0):
    diff=[]
    for j in range(len1):
        diff.append(lis0-lis1[j])
    if i>0:
        min1=min(abs(x) for x in diff)
        if min0>min1:
            min0=min1
            if min0 in diff:
                a=diff.index(min0)
            else:
                a=a=diff.index(-1*min0)
            diff0=diff
            b=i
    else:
        min0=min(abs(x) for x in diff)
        if min0 in diff:
            a=diff.index(min0)
        else:
            a=a=diff.index(-1*min0)
        diff0=diff
        b=i

print(lis0,lis1[a],min0)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-20 15:28:27 | 显示全部楼层
def func208(m,n):
    k=[]
    for i in m:
        for j in n:
            k.append((i,j,i-j))
    k = sorted(k,key=lambda x:abs(x[2]))
    return k[0]

print(func208([-62, 167, 121, 72, 57, -21, 129, 173, -80, 35],[12, -6, 39, -11, 197, -47, -90, 28, 51, 190]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-10 17:25:17 | 显示全部楼层
  1. a=[-27, 184, 76, 193, 30, -96, 186, -61, 43, -94]
  2. b=[166, 28, 47, 83, 15, 26, 153, 188, 43, 110]
  3. mylist=[(i,j,abs(i-j)) for i in a for j in b]
  4. mylist.sort(key=lambda z:z[2])
  5. print(mylist[0])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-10 21:09:29 | 显示全部楼层
  1. def func208(list1,list2):
  2.     flag1=list1[0]
  3.     flag2=list2[0]
  4.     for each1 in list1:
  5.         for each2 in list2:
  6.             if abs(each1-each2)<abs(flag1-flag2):
  7.                 flag2=each2
  8.                 flag1=each1
  9.     print(flag1,flag2,abs(flag1-flag2))


  10. list1=[-62, 167, 121, 72, 57, -21, 129, 173, -80, 35]
  11. list2=[12, -6, 39, -11, 197, -47, -90, 28, 51, 190]
  12. func208(list1,list2)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-5 16:11:23 | 显示全部楼层
def test208():
    list1 = [-62, 167, 121, 72, 57, -21, 129, 173, -80, 35]
    list2 = [12, -6, 39, -11, 197, -47, -90, 28, 51, 190]
    list1.sort()
    list2.sort()
    min = [list1[0], list1[1], abs(list1[0] - list2[0])]
    for i in list1:
        for j in list2:
            if abs(i - j) < min[2]:
                min = [i, j, abs(i - j)]
            if j > i:
                break
    print(min)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-18 21:53:18 | 显示全部楼层
  1. def func(it1,it2):return min(((a,b,abs(a-b))for a in it1 for b in it2),key=lambda x:x[2])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-19 22:55:34 | 显示全部楼层
list1=[-62, 167, 121, 72, 57, -21, 129, 173, -80, 35]
list2=[12, -6, 39, -11, 197, -47, -90, 28, 51, 190]
list3=[]
def function5():
    for i in list(range(len(list1))):
        for j in list(range(len(list2))):
            list3.append(abs(list1[i]-list2[j]))
    num=min(list3)
    for i in list(range(len(list1))):
        for j in list(range(len(list2))):
            if num == abs(list1[i]-list2[j]):
                return list1[i],list2[j],num
print(function5())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 15:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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