10 把一个列表中含有某些相同字符的元素分成一组

本帖最后由 aggopie 于 2018-9-19 09:41 编辑

["SHFE.al", "SHFE.cu", "SHFE.zn",
  "CZCE.SR","CZCE.CF","CZCE.CY","CZCE.ZC",
   "DCE.m","DCE.y","DCE.a","DCE.b","DCE.p"
    "CFFEX.IF","CFFEX.IH","CFFEX.IC","CFFEX.TS",
      "INE.sc"]


怎样把上面这样的列表中有某些相同字符分别划分到一个列表,比如把带有SHFE的分为一个列表,CZCE的分为一个列表,DCE的分为一个列表,但是有某些相同字符有时候有不确定是哪些,比如有时候会有SHFE,CZCE,有时候会是其他的,比如INE,off等


请先 登录 后评论

最佳答案 2021-09-23 22:26

献丑
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # Created by lightwave on 2017/9/6
  4. # Copyright (c) 2017 lightwave. All rights reserved.
  5. from collecti** import defaultdict

  6. temp_list = ["SHFE.al", "SHFE.cu", "SHFE.zn",
  7.              "CZCE.SR", "CZCE.CF", "CZCE.CY", "CZCE.ZC",
  8.              "DCE.m", "DCE.y", "DCE.a", "DCE.b", "DCE.p",
  9.              "CFFEX.IF", "CFFEX.IH", "CFFEX.IC", "CFFEX.TS",
  10.              "INE.sc"]

  11. key_func = lambda x: x.split(".")[0]

  12. result_dict = defaultdict(list)
  13. for item in temp_list:
  14.     key = key_func(item)
  15.     result_dict[key].append(item)

  16. print(result_dict.values())
复制代码


group_by有个缺点是相同的内容必须是连续的或者说是排过序的
请先 登录 后评论

其它 5 个回答

李宗县
显然是用正则表达式了。
请先 登录 后评论
踏浪情歌
用pandas
内建itertools里的groupby也可以,自己去研究一下

import pandas as pd
a=["SHFE.al", "SHFE.cu", "SHFE.zn",
  "CZCE.SR","CZCE.CF","CZCE.CY","CZCE.ZC",
   "DCE.m","DCE.y","DCE.a","DCE.b","DCE.p",
    "CFFEX.IF","CFFEX.IH","CFFEX.IC","CFFEX.TS",
      "INE.sc"]
df=pd.DataFrame(a,columns=['a'])
df['temp']=df['a'].apply(lambda x: x.split('.')[0])
grouped=df.groupby('temp')['a']
for i,data in grouped:
      print(list(data))
请先 登录 后评论
历经传奇
多谢,多谢
请先 登录 后评论
时榕-余

多多学习了
请先 登录 后评论
安诺斯诺
  1. myList =  [
  2.     'SHFE.al', 'SHFE.cu', 'SHFE.zn',
  3.     'CZCE.SR', 'CZCE.CF', 'CZCE.CY',
  4.     'CZCE.ZC', 'DCE.m', 'DCE.y',
  5.     'DCE.a', 'DCE.b', 'DCE.p',
  6.     'CFFEX.IF', 'CFFEX.IH', 'CFFEX.IC',
  7.     'CFFEX.TS', 'INE.sc'
  8. ]

  9. def array(data: list) -> list:
  10.     category = []
  11.     mySet = set()
  12.     final = []
  13.     for i in data:
  14.         a, b = i.split('.')
  15.         category.append((a, b))
  16.         mySet.add(a)
  17.     for i in mySet:
  18.         a = []
  19.         for j in category:
  20.             if j[0] == i:
  21.                 a.append('.'.join(j))
  22.         final.append(a)
  23.     return final

  24. print(array(myList))
复制代码
请先 登录 后评论
  • 6 关注
  • 0 收藏,369 浏览
  • 嫣大大 提出于 2021-09-23 22:26

相似问题