鱼C论坛

 找回密码
 立即注册
查看: 4796|回复: 8

[已解决]一个含金量较高的问题,求高手解答

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

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

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

x
在国外上学,刚接触Python跟不上 老师留的quiz题,关乎期末成绩
自己研究了几天,看小甲鱼的视频,奈何太菜。。。
求高手解答,我一定好好研究
最后支持下小甲鱼!

例子:
随机生成的列表
[2,0,2, 2,        1,0,        0,0, 1,3,1,2]                                                               
[6,        55,        44,        30,        35,        74,        41, 24, 13, 12,        61,        42,        33,        40,        89]
结果
[44,        6,35,74,        30,        55,        41, 24, 13, 61,        42,        33]       
       
列表1中,元素不重复的切分[2,0]  [2]  [2,1,0]  [0]  [0,1,3]  [12]
即不能存在重复的元素
[2 ,0]对应列表2,列表2的第2个元素为44,第0个元素为6,所以输出44和6
删除44 和6
[2] 此时对应删除过元素的列表2, 第二个元素为35,所以输出35并删除
[2,1,0]   2对应第二个元素为74......以此类推


import sys
from random import seed, randint, sample


nb_of_indexes = 12
max_index = 3
upper_bound = 100

try:
     seed(input('Enter an integer: '))
except TypeError:
    print('Incorrect input, giving up.')
    sys.exit()

L_indexes = [randint(0, max_index) for _ in range(nb_of_indexes)]
L_values = sample(range(upper_bound), nb_of_indexes + max_index)
print('The generated lists of indexes and values are, respectively:')
print('  ', L_indexes)
print('  ', L_values)

resulting_list = []
# 以你的代码代替此行

print('The resulting list of values is:')
print('  ', resulting_list)
最佳答案
2016-3-12 21:39:44
  1. import sys
  2. from random import seed, randint, sample


  3. nb_of_indexes = 12
  4. max_index = 3
  5. upper_bound = 100

  6. try:
  7.      seed(input('Enter an integer: '))
  8. except TypeError:
  9.     print('Incorrect input, giving up.')
  10.     sys.exit()

  11. L_indexes = [randint(0, max_index) for _ in range(nb_of_indexes)]
  12. L_values = sample(range(upper_bound), nb_of_indexes + max_index)
  13. print('The generated lists of indexes and values are, respectively:')
  14. print('  ', L_indexes)
  15. print('  ', L_values)

  16. resulting_list = []

  17. noRepeatList = []
  18. while L_indexes:
  19.     if L_indexes[0] in noRepeatList:
  20.         for idx in noRepeatList:
  21.             resulting_list.append(L_values[idx])
  22.         noRepeatList.sort()
  23.         for i in range(len(noRepeatList)):
  24.             L_values.pop(noRepeatList[i]-i)
  25.         noRepeatList = []
  26.     else:
  27.         noRepeatList.append(L_indexes.pop(0))
  28. for idx in noRepeatList:
  29.     resulting_list.append(L_values[idx])
  30. noRepeatList.sort()
  31. for i in range(len(noRepeatList)):
  32.     L_values.pop(noRepeatList[i]-i)
  33.    
  34. print('The resulting list of values is:')
  35. print('  ', resulting_list)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-12 21:13:27 | 显示全部楼层
没懂你的意思.........
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-12 21:39:44 | 显示全部楼层    本楼为最佳答案   
  1. import sys
  2. from random import seed, randint, sample


  3. nb_of_indexes = 12
  4. max_index = 3
  5. upper_bound = 100

  6. try:
  7.      seed(input('Enter an integer: '))
  8. except TypeError:
  9.     print('Incorrect input, giving up.')
  10.     sys.exit()

  11. L_indexes = [randint(0, max_index) for _ in range(nb_of_indexes)]
  12. L_values = sample(range(upper_bound), nb_of_indexes + max_index)
  13. print('The generated lists of indexes and values are, respectively:')
  14. print('  ', L_indexes)
  15. print('  ', L_values)

  16. resulting_list = []

  17. noRepeatList = []
  18. while L_indexes:
  19.     if L_indexes[0] in noRepeatList:
  20.         for idx in noRepeatList:
  21.             resulting_list.append(L_values[idx])
  22.         noRepeatList.sort()
  23.         for i in range(len(noRepeatList)):
  24.             L_values.pop(noRepeatList[i]-i)
  25.         noRepeatList = []
  26.     else:
  27.         noRepeatList.append(L_indexes.pop(0))
  28. for idx in noRepeatList:
  29.     resulting_list.append(L_values[idx])
  30. noRepeatList.sort()
  31. for i in range(len(noRepeatList)):
  32.     L_values.pop(noRepeatList[i]-i)
  33.    
  34. print('The resulting list of values is:')
  35. print('  ', resulting_list)
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +1 收起 理由
hldh214 + 5 + 5 + 1 强!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-3-12 21:53:56 | 显示全部楼层
本帖最后由 hldh214 于 2016-3-12 22:02 编辑

好吧, 我的代码有误, 你就参考楼上的代码吧
  1. import sys
  2. from random import seed, randint, sample

  3. nb_of_indexes = 12
  4. max_index = 3
  5. upper_bound = 100

  6. try:
  7.     seed(input('Enter an integer: '))
  8. except TypeError:
  9.     print('Incorrect input, giving up.')
  10.     sys.exit()
  11. L_indexes = [randint(0, max_index) for _ in range(nb_of_indexes)]
  12. L_values = sample(range(upper_bound), nb_of_indexes + max_index)
  13. print('The generated lists of indexes and values are, respectively:')
  14. print('  ', L_indexes)
  15. print('  ', L_values)

  16. resulting_list = []

  17. L_divided = []  # divided list
  18. L_one_set = []  # temp list 4 iter
  19. for each in L_indexes:
  20.     if each not in L_one_set:
  21.         L_one_set.append(each)
  22.     else:
  23.         L_divided.append(L_one_set)
  24.         L_one_set = []
  25.         L_one_set.append(each)
  26. print(L_divided)
  27. for each_list in L_divided:
  28.     # each_list: each list in divided list
  29.     for each in each_list:
  30.         # each: index of L_values
  31.         resulting_list.append(L_values[each])
  32.     for each in each_list:
  33.         L_values.pop(each)
  34.         
  35. print('The resulting list of values is:')
  36. print('  ', resulting_list)
复制代码

另外以后发代码要记得代码格式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-12 23:47:18 | 显示全部楼层
我也试一下。就不做随机生成列表了,直接用例子中的了。
  1. list1 = [2, 0, 2, 2, 1, 0, 0, 0, 1, 3, 1, 2]
  2. list2 = [6, 55, 44, 30, 35, 74, 41, 24, 13, 12, 61, 42, 33, 40, 89]
  3. list3 = []#生成孔列表用于存放list1切分
  4. i = 0
  5. while True:
  6.     list3.append([])
  7.     while True:
  8.         list3[i].append(list1[0])
  9.         list1.pop(0)
  10.         if len(list1) == 0 or list1[0] in list3[i]:
  11.             break
  12.     i += 1
  13.     if len(list1) == 0:
  14.         break
  15. list4 = []#生成孔列表用于存放结果
  16. for i in list3:
  17.     for j in i:
  18.         list4.append(list2[j])
  19.     i.sort(reverse = True)#逆排序,避免删除前面的,后面的位移
  20.     for j in i:
  21.         list2.pop(j)
  22. print(list4)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-13 08:53:49 | 显示全部楼层
谢谢大家的回复!激动!
这个题的附加要求是11行左右的代码哦~有兴趣的同学可以试试
另外过几天我会发出答案的,谢谢大家帮忙,一同进步哦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-3-13 12:15:44 | 显示全部楼层
  1. import sys
  2. from random import seed, randint, sample


  3. nb_of_indexes = 12
  4. max_index = 3
  5. upper_bound = 100

  6. try:
  7.      seed(input('Enter an integer: '))
  8. except TypeError:
  9.     print('Incorrect input, giving up.')
  10.     sys.exit()

  11. L_indexes = [randint(0, max_index) for _ in range(nb_of_indexes)]
  12. L_values = sample(range(upper_bound), nb_of_indexes + max_index)
  13. print('The generated lists of indexes and values are, respectively:')
  14. print('  ', L_indexes)
  15. print('  ', L_values)

  16. resulting_list = []
  17. # ---
  18. mark = []
  19. L_values = dict(zip(range(len(L_values)), L_values))
  20. for i in L_indexes:
  21.     if i in mark:
  22.         for x in mark: del L_values[x]
  23.         L_values = list(L_values.values())
  24.         L_values = dict(zip(range(len(L_values)), L_values))
  25.         mark = []
  26.     resulting_list.append(L_values[i])
  27.     mark.append(i)
  28. # ---
  29. print('The resulting list of values is:')
  30. print('  ', resulting_list)
复制代码


P.s: 让输入的数字有啥意义。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-13 15:34:16 | 显示全部楼层
wei_Y 发表于 2016-3-13 12:15
P.s: 让输入的数字有啥意义。

麻烦您大概讲一下您的思路好么?  我看懂前面几个人的,  看不懂您的,   字典起什么作用  ?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-13 16:40:00 | 显示全部楼层
小静静 发表于 2016-3-13 15:34
麻烦您大概讲一下您的思路好么?  我看懂前面几个人的,  看不懂您的,   字典起什么作用  ?

喔,按照楼主的意思:
持续从L2里拿值,当遇到L1重复的时候就进行删除。
也就是想同时删除1个或几个数。
由于技穷,
只能想到一个个删除。字典就完全符合我的要求了。
字典按键存储,删除一个不影响其他,下标还是下标。这样在完成一轮删除后,将字典按键的下标再次排列成列表,在将列表转换成一个新的字典。
循环。
好吧,我表达有问题,将就着看- -。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-20 04:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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