免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2685 | 回复: 6
打印 上一主题 下一主题

python新手求教如何根据条件得到一个新的列表 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-03-09 20:24 |只看该作者 |倒序浏览
现有2个列表
list1=[2,0,2,2,1,0,0]
list2=[6,55,44,30,35,74,41,24,13,12]
最终要得出result_list=[44,6,35,74,30,55,41]的结果。

第一个列表是指示第二个列表中数的位置,得到结果后将其从第二个列表中删除,从而继续寻找下一个数字。
新手求教这段语句怎么实现?如何将得到的数字重新组成一个列表输出呢?
i=0
result_list=[list2[list1[i]]]
这样的话可以得到一个结果,怎么能集合所有的结果集合在一起呢?
求帮忙!~谢谢

论坛徽章:
3
程序设计版块每日发帖之星
日期:2016-02-23 06:20:0015-16赛季CBA联赛之八一
日期:2017-10-26 17:58:2515-16赛季CBA联赛之北控
日期:2017-11-02 10:50:56
2 [报告]
发表于 2016-03-10 10:23 |只看该作者
l1=[2,0,2,2,1,0,0]
l2=[6,55,44,30,35,74,41,24,13,12]
result_list=[]

for i in l1:
    result_list.append(l2[i])
    del l2[i]
print(result_list)

论坛徽章:
11
2015年迎新春徽章
日期:2015-03-04 09:55:282017金鸡报晓
日期:2017-02-08 10:39:4215-16赛季CBA联赛之辽宁
日期:2016-12-15 10:24:1715-16赛季CBA联赛之佛山
日期:2016-11-30 09:04:2015-16赛季CBA联赛之江苏
日期:2016-04-29 15:56:1215-16赛季CBA联赛之同曦
日期:2016-04-12 13:21:182016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之山东
日期:2016-02-16 11:37:52每日论坛发贴之星
日期:2016-02-07 06:20:00程序设计版块每日发帖之星
日期:2016-02-07 06:20:0015-16赛季CBA联赛之新疆
日期:2018-01-09 16:25:37
3 [报告]
发表于 2016-03-10 16:46 |只看该作者
list3=[list2.pop(i) for i in list1]

论坛徽章:
0
4 [报告]
发表于 2016-03-10 18:20 |只看该作者
回复 2# 过过招

谢谢你的回复~
之前我也自己试出来了,但现在又遇到问题,
list1完整是[2, 0, 2, 2, 1, 0, 0, 0, 1, 3, 1, 2]
list2[6, 55, 44, 30, 35, 74, 41, 24, 13, 12, 61, 42, 33, 40, 89]
通过现在的语句出来的答案[44, 6, 35, 74, 30, 55, 41, 24, 12, 33, 61, 40]
但要求做到的结果是[44, 6, 35, 74, 30, 55, 41, 24, 13, 61, 42, 33]
最后四位混乱了,因为list1中的后五位0,1,3是一组数字输出不应该先输出再排除而是一起输出这3个位置的数字再一起排除,这种应该通过怎么样来实现,想要学习一下,谢谢了!
ps:2,0 是一组  2是一组  2,1,0是一组 0是一组,0是一组,0,1,3是一组,1,2是一组,序号不能重复 谢谢了


   

论坛徽章:
11
2015年迎新春徽章
日期:2015-03-04 09:55:282017金鸡报晓
日期:2017-02-08 10:39:4215-16赛季CBA联赛之辽宁
日期:2016-12-15 10:24:1715-16赛季CBA联赛之佛山
日期:2016-11-30 09:04:2015-16赛季CBA联赛之江苏
日期:2016-04-29 15:56:1215-16赛季CBA联赛之同曦
日期:2016-04-12 13:21:182016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之山东
日期:2016-02-16 11:37:52每日论坛发贴之星
日期:2016-02-07 06:20:00程序设计版块每日发帖之星
日期:2016-02-07 06:20:0015-16赛季CBA联赛之新疆
日期:2018-01-09 16:25:37
5 [报告]
发表于 2016-03-10 18:48 |只看该作者
list1 = [2, 0, 2, 2, 1, 0, 0, 0, 1, 3, 1, 2]
list2 = [6, 55, 44, 30, 35, 74, 41, 24, 13, 12, 61, 42, 33, 40, 89]
req = [44, 6, 35, 74, 30, 55, 41, 24, 13, 61, 42, 33]

def pick(index):
    idx = []
    for i in index:
        if i in idx:
            yield idx
            idx = []
        idx.append(i)
    if idx:
        yield idx

def pop(data, index):
    ret=[data[i] for i in index]
    index.sort(reverse=True)
    [data.pop(i) for i in index]
    return ret

list3 = []
for index in pick(list1):
    list3.extend(pop(list2, index))


list3 == req

尼玛,加一个东西就要加很多实现了

论坛徽章:
0
6 [报告]
发表于 2016-03-10 19:15 |只看该作者
回复 5# bskay

谢谢大神!~感受到了python的魅力!需要更加深入研究
   

论坛徽章:
0
7 [报告]
发表于 2016-03-12 13:55 |只看该作者
本帖最后由 noogel 于 2016-03-12 13:55 编辑

回复 4# ItachiTL


看问题就被你说晕了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP