鱼C论坛

 找回密码
 立即注册
查看: 951|回复: 19

[已解决]求助求助,列表筛选排序问题

[复制链接]
发表于 2020-2-23 22:09:36 | 显示全部楼层 |阅读模式

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

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

x
有这样一个列表(用于做参考)

  1. 原始列表 = ['小赵','小钱','小孙','小李' ]
复制代码


然后对其他输入的内容进行分筛,将输入的字符串进行提取,并排序重新输出

举个例子

  1. >>>list_1 = '上午有小赵、小钱、小孙到场'
  2. '小赵'
  3. '小钱'
  4. '小孙'
复制代码
  1. >>>list_2 = '上午有小赵、小孙、小钱到场'
  2. '小赵'
  3. '小钱'
  4. '小孙'
  5. #list_2中小钱和小孙的顺序反了,但在输出时依旧修正了过来
复制代码
  1. >>>list_3 = '上午有小钱、小赵、小王到场'
  2. '小赵'
  3. '小钱'
  4. #把非原始列表中的元素'小王'筛掉,并且排列好顺序
复制代码


看着挺简单的一个目的但就是理不清楚思路,,
只能一长串的if...elif
而且原视列表里的元素内容一多了就会很累,,,

求一波大佬指点,,,,这个程序应该怎么优化一下更简单
最佳答案
2020-2-24 13:39:02
这样吧, 我假设你参考的列表已知,现在是输入一个字符串,按照参考列表来输出
  1. lst=['小赵','小钱','小孙','小李' ]
  2. string_1=input('请输入字符串,按参考列表顺序输出')
  3. print(' '.join([i for i in lst if i in string_1]))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-23 22:16:08 | 显示全部楼层
本帖最后由 飞天大猫 于 2020-2-23 22:17 编辑

每太明白你要表达的意思,等下试一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 22:17:41 From FishC Mobile | 显示全部楼层
应该狠简单吧,可惜手机无法编码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-23 22:23:54 | 显示全部楼层
wp231957 发表于 2020-2-23 22:17
应该狠简单吧,可惜手机无法编码

应该是很简单的问题,,,但是就是想不出来比较简单的方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 22:26:49 | 显示全部楼层
额,我不懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 23:43:55 | 显示全部楼层
djp175 发表于 2020-2-23 22:23
应该是很简单的问题,,,但是就是想不出来比较简单的方法

我编了一下,里面有一个判断条件始终会出错;就是 “小王” 在 lista 里面的 字符位置 ,一旦计算就是错误,还没有想到好的办法怎么去剔除
但是整体上用 函数的方法是可以运算的,不用很多 if 语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 23:55:38 | 显示全部楼层
本帖最后由 fan1993423 于 2020-2-23 23:58 编辑

输出字符串还是列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 00:01:17 | 显示全部楼层
  1. lst=['小赵','小钱','小孙','小李' ]
  2. list_1 = '上午有小赵、小钱、小孙到场'
  3. list_2 = '上午有小赵、小孙、小钱到场'
  4. list_3 = '上午有小钱、小赵、小王到场'
  5. print([i for i in lst if i in list_1])#这个是列表输出
  6. print(' '.join([i for i in lst if i in list_3]))#这个是字符串输出
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 00:21:49 | 显示全部楼层
  1. lista = ['小赵','小钱','小孙','小李' ]

  2. list_1 = '上午有小赵、小钱、小孙到场'
  3. list_2 = '上午有小赵、小孙、小钱到场'
  4. list_3 = '上午有小钱、小赵、小王到场'

  5. listc = []


  6. def list_split(n):
  7.     (a1,b,c1)=n.split("、",2)
  8.     (a2,a)=a1.split("有",2)
  9.     (c,c2)=c1.split("到",2)
  10.    
  11.     listb = [a,b,c]   
  12.   
  13.     for n in listb:
  14.         if n in lista:
  15.             listc.append(lista.index(n))

  16.     listc.sort()
  17.    
  18.     for each in listc:
  19.         print(lista[each:each+1])   
  20.         
  21. list_split(list_1)
  22. listc = []

  23. list_split(list_2)
  24. listc = []

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

使用道具 举报

发表于 2020-2-24 00:36:04 | 显示全部楼层
没太看明白想表达意思,推荐试试list列表推导式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-24 11:46:22 | 显示全部楼层

不是不是   你把字符串和列表给搞反了

是从字符串中筛选出符合列表里有的元素,并且按照列表里的顺序排列
这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-24 11:48:16 | 显示全部楼层

好像不是这样欸大佬23333333
输出不太对  而且比我的更复杂了hhhh
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-24 11:56:39 | 显示全部楼层
我好像没有描述太清楚,,,,
就直接拿第三段来举例
输入    list_3 = '上午有小钱、小赵、小王到场'
最后按顺序输出
'小赵'
'小钱'
把不在原始列表中的'小王'这个元素去掉,并且重新排列顺序(在list_3中小赵和小钱的顺序是反的)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 13:13:19 | 显示全部楼层
djp175 发表于 2020-2-24 11:46
不是不是   你把字符串和列表给搞反了

是从字符串中筛选出符合列表里有的元素,并且按照列表里的顺序 ...

我这个就是这样啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 13:15:08 | 显示全部楼层
djp175 发表于 2020-2-24 11:46
不是不是   你把字符串和列表给搞反了

是从字符串中筛选出符合列表里有的元素,并且按照列表里的顺序 ...

你把结果带进去试试不就对了,另外列表是list,字符串是string,请不要用list_1来表示字符串,请用string_1来表示
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 13:16:44 | 显示全部楼层
fan1993423 发表于 2020-2-24 13:13
我这个就是这样啊

你自己看你这几个list1,list2,list3是不是你想要的答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 13:21:33 | 显示全部楼层
难道你说的意思是,输入一个字符串,然后对字符串进行操作,列表是不能操作的,只是说知道排序?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 13:39:02 | 显示全部楼层    本楼为最佳答案   
这样吧, 我假设你参考的列表已知,现在是输入一个字符串,按照参考列表来输出
  1. lst=['小赵','小钱','小孙','小李' ]
  2. string_1=input('请输入字符串,按参考列表顺序输出')
  3. print(' '.join([i for i in lst if i in string_1]))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-24 15:08:17 | 显示全部楼层
fan1993423 发表于 2020-2-24 13:15
你把结果带进去试试不就对了,另外列表是list,字符串是string,请不要用list_1来表示字符串,请用string ...

哦哦哦,,,感谢纠正感谢纠正  脑子糊涂了hhhhhhh
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-24 15:09:05 | 显示全部楼层
fan1993423 发表于 2020-2-24 13:39
这样吧, 我假设你参考的列表已知,现在是输入一个字符串,按照参考列表来输出

大概就是要这个样子,,,谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 10:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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