鱼C论坛

 找回密码
 立即注册
查看: 3078|回复: 15

[已解决]python列表里查询某一个值出现的所有位置

[复制链接]
发表于 2018-11-16 10:53:12 | 显示全部楼层 |阅读模式

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

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

x
列表里查询某一个值出现的所有位置 怎么实现呢?求帮助
最佳答案
2018-11-19 14:01:18
Amgalang 发表于 2018-11-19 09:17
您好 我这个新手还是有点不懂,您看看 图,MINU 是 我想要找的单词,我希望能找到这个单词在文件里出 ...

这是可以查同一行,出现多个要查找的单词的代码:
  1. def find_word_pos(filename,word):
  2.     import re
  3.     res=[]
  4.     with open(filename) as f:
  5.         lines=f.readlines()
  6.         linenum=0
  7.         for line in lines:
  8.             linenum+=1
  9.             pat=re.compile(word, re.RegexFlag.I)
  10.             pos=pat.finditer(line)
  11.             for each in pos:
  12.                 res.append([linenum,each.span()[0]])
  13.     return res
  14. if __name__=='__main__':
  15.     txtfilename=r'c:\temp\10+.txt'
  16.     word='minu'
  17.     word_pos=find_word_pos(txtfilename,word)
  18.     if word_pos:
  19.         print('找到单词"%s"在文件的位置:' % word)
  20.         for each in word_pos:
  21.             print('第{0[0]}行位置{0[1]}开始'.format(each))
  22.     else:
  23.         print('未找到单词“%s%"' % word)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-11-16 11:06:08 | 显示全部楼层
自己用个for循环:
  1. >>> lst = [3, 5, 2, 4, 3, 2, 1, 3, 4, 3, 6, 3]
  2. >>> result = []
  3. >>> for i in range(len(lst)):
  4.         if lst[i] == 3:
  5.                 result.append(i)

  6.                
  7. >>> result
  8. [0, 4, 7, 9, 11]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-16 15:31:15 | 显示全部楼层

您好,
       我的时文本的 希望您解答下,我实在有点困惑 谢谢 无标题1.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-16 15:37:41 | 显示全部楼层
if判断的字符串要用引号括起来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-16 22:08:34 | 显示全部楼层
本帖最后由 喜欢吃菠菜 于 2018-11-16 22:12 编辑
Amgalang 发表于 2018-11-16 15:31
您好,
       我的时文本的 希望您解答下,我实在有点困惑 谢谢

  1. l=[3,5,2,4,3,2,1,3,4,3,6,3]
  2.     def GetPosition(key,ilist):
  3.         return [(idx,item)[0] for (idx,item) in enumerate(ilist) if item==key]

  4.     print(GetPosition(3,l))
复制代码


结果:[0, 4, 7, 9, 11]
你如果要查找文本,把l换成文本的列表,key参数输入文本就可以
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-19 09:17:04 | 显示全部楼层
喜欢吃菠菜 发表于 2018-11-16 22:08
结果:[0, 4, 7, 9, 11]
你如果要查找文本,把l换成文本的列表,key参数输入文本就可以

无标题.png    您好 我这个新手还是有点不懂,您看看 图,MINU 是 我想要找的单词,我希望能找到这个单词在文件里出现的所有位置。谢谢帮助
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-19 13:30:23 | 显示全部楼层
本帖最后由 喜欢吃菠菜 于 2018-11-19 13:37 编辑
Amgalang 发表于 2018-11-19 09:17
您好 我这个新手还是有点不懂,您看看 图,MINU 是 我想要找的单词,我希望能找到这个单词在文件里出 ...


如果是文件,就要进行文件操作。
参考一下,把文件名换成你的文件的路径,这个代码只找一行中的第一个匹配的单词,如果一行有多个,需要改进。

  1. def find_word_pos(filename,word):
  2.     res=[]
  3.     with open(filename) as f:
  4.         lines=f.readlines()
  5.         linenum=0
  6.         for line in lines:
  7.             linenum+=1
  8.             s=line.lower()
  9.             pos=s.find(word)
  10.             if pos!=-1:
  11.                 res.append([linenum,pos])
  12.     return res
  13. if __name__=='__main__':
  14.     txtfilename=r'c:\temp\10+.txt'
  15.     word='minu'
  16.     word_pos=find_word_pos(txtfilename,word)
  17.     if word_pos:
  18.         print('找到单词"%s"在文件的位置:' % word)
  19.         for each in word_pos:
  20.             print('第{0[0]}行位置{0[1]}开始'.format(each))
  21.     else:
  22.         print('未找到单词“%s%"' % word)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-19 14:01:18 | 显示全部楼层    本楼为最佳答案   
Amgalang 发表于 2018-11-19 09:17
您好 我这个新手还是有点不懂,您看看 图,MINU 是 我想要找的单词,我希望能找到这个单词在文件里出 ...

这是可以查同一行,出现多个要查找的单词的代码:
  1. def find_word_pos(filename,word):
  2.     import re
  3.     res=[]
  4.     with open(filename) as f:
  5.         lines=f.readlines()
  6.         linenum=0
  7.         for line in lines:
  8.             linenum+=1
  9.             pat=re.compile(word, re.RegexFlag.I)
  10.             pos=pat.finditer(line)
  11.             for each in pos:
  12.                 res.append([linenum,each.span()[0]])
  13.     return res
  14. if __name__=='__main__':
  15.     txtfilename=r'c:\temp\10+.txt'
  16.     word='minu'
  17.     word_pos=find_word_pos(txtfilename,word)
  18.     if word_pos:
  19.         print('找到单词"%s"在文件的位置:' % word)
  20.         for each in word_pos:
  21.             print('第{0[0]}行位置{0[1]}开始'.format(each))
  22.     else:
  23.         print('未找到单词“%s%"' % word)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-19 15:30:53 | 显示全部楼层
喜欢吃菠菜 发表于 2018-11-19 14:01
这是可以查同一行,出现多个要查找的单词的代码:

谢谢您,不过还是没太懂,我自己做了一个语料库,想在这个txt里 找到一些高频单词的位置,比如,“BIG” 这个单词 在我的txt中[ 3,7,10,19,35,66]  第三处,7处....这样的展现 找到其 出现的位置,您看,能实现吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-19 15:54:18 | 显示全部楼层
Amgalang 发表于 2018-11-19 15:30
谢谢您,不过还是没太懂,我自己做了一个语料库,想在这个txt里 找到一些高频单词的位置,比如,“BIG”  ...

你试过运行我这个代码了吗?
如果是位置,应该基本就可以了啊
你要的是位置还是统计单词出现的次数?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-19 19:24:56 | 显示全部楼层
喜欢吃菠菜 发表于 2018-11-19 15:54
你试过运行我这个代码了吗?
如果是位置,应该基本就可以了啊
你要的是位置还是统计单词出现的次数?

我要的是 一个单词  出现的所有位置 哈哈,我试着让代码跑跑
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-22 19:35:57 | 显示全部楼层
喜欢吃菠菜 发表于 2018-11-19 14:01
这是可以查同一行,出现多个要查找的单词的代码:

您好,真心感谢您,您的代码 解决了我的问题,不过来了个新的问题,
就是 现在代码跑完后 也在出现 比如,我要找到 单词 ‘SKY’代码跑完后 也出现了 'TTSky‘,或者是 ‘SKYOO',但是 我就想要 独立的’SKY' 不要某些单词中的 ,或者以它开头的,就要‘SKY'没有其他成分的,您看能实现吗?是不是要把我的文件 先都改为字符串呢?希望指点。谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-22 20:53:36 | 显示全部楼层
本帖最后由 喜欢吃菠菜 于 2018-11-22 21:07 编辑
Amgalang 发表于 2018-11-22 19:35
您好,真心感谢您,您的代码 解决了我的问题,不过来了个新的问题,
就是 现在代码跑完后 也在出现 比如 ...

  1. def find_word_pos1(filename,word):
  2.     import re
  3.     res=[]
  4.     with open(filename) as f:
  5.         lines=f.readlines()
  6.         linenum=0
  7.         for line in lines:
  8.             linenum+=1
  9.             pat=re.compile(r'\b'+word+r'\b', re.RegexFlag.I)
  10.             pos=pat.finditer(line)
  11.             for each in pos:
  12.                 res.append([linenum,each.span()[0]])
  13.     return res
  14. if __name__=='__main__':
  15.     txtfilename=r'c:\temp\10+.txt'
  16.     word='minu'
  17.     word_pos=find_word_pos1(txtfilename,word)
  18.     if word_pos:
  19.         print(f'找到单词"{word}"在文件的位置:')
  20.         for each in word_pos:
  21.             print(f'第{each[0]}行位置{each[1]}开始')
  22.     else:
  23.         print(f'未找到单词“{word}"')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-22 21:14:13 | 显示全部楼层

哇,真心谢谢你,好像跟您 学习python 谢谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-22 21:27:05 | 显示全部楼层
Amgalang 发表于 2018-11-22 21:14
哇,真心谢谢你,好像跟您 学习python 谢谢。

互相学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-22 19:27:02 | 显示全部楼层
您好,再请教个问题,
      text4.dispersion_plot(["citizens", "democracy", "freedom", "duties", "America"])
我用同样的方式在我的文件里查询了单词“NI”,然而图上也出现了单词中间含有NI的词怎样把这个问题解决呢?我需要 就”NI“单词,不要词中间的带有 NI 的,求解答,万分感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-14 02:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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