如何检查列表中的项目是否存在于使用python的其他列表中?

问题描述:

我有一个包含这些线路例如如何检查列表中的项目是否存在于使用python的其他列表中?

[:];@;;]wqwww actualnumber 1234 ;;:@## 
aaaa ''3# allnumber 9876 
///qqq |||))) 
]][]: best 56 

我想要得到的价值1234987656一个文本文件。像这样(期望输出)

1234 
9876 
56 

我试着用下面的脚本,但它并没有打印出任何东西

with open("test.txt", "r") as f: 
    lines = f.readlines() 
    stripped_lines = [line.strip() for line in lines] 

    word = ["actual number", "potential", "time"] 
    if any(item in stripped_lines for item in word): 
     aa = stripped_lines.split("actualnumber ")[1].split(" ")[0] 
     bb = stripped_lines.split("allnumber ")[1].split(" ")[1] 
     cc = stripped_lines.split("best ")[1] 

     print aa 
     print bb 
     print cc 

我错过了什么?

+0

你真的想通过关键字在字符串中搜索数字,或者你只是想抓住一个字符串中的任何数字? – Liliane

+0

我其实想抓住特定位置的号码。所以我为什么要'9876'而不是'3'。如果你可以在文本文件中看到,基本上我想要得到一个关键字后的数字 – Ling

+0

Hi @Ling可能会帮助找到相同的值, match_values = [我在stripped_lines中的item for i in word if item在我] 为match_values值: \t打印(价值) – Anup

你可以用re模块

import re 
with open('f.txt') as f: 
    data = f.read() 
    act = re.findall(r'actualnumber\s+(\d+)',data) 
    best = re.findall(r'best\s(\d+)',data) 
    allnumber = re.findall(r'allnumber\s(\d+)',data) 
    print "actualnumber : ", act[0] if act else None 
    print "allnumber : ", allnumber[0] if allnumber else None 
    print "best : ", best[0] if best else None 

输出

actualnumber : 1234 
allnumber : 9876 
best : 56 
+0

这是伟大的,但我想得到的每个值不是列表。我的意思是,例如'aa'将打印'1234','bb'将打印'9876','cc'将打印'56'。这样我就可以在其他操作中使用'1234'的'aa'的值 – Ling

+0

我更新了我的答案和你的要求。 @Ling – Arun

+0

@Ling你是否需要将它们存储在变量aa,bb,cc中?或者一本字典是否合适?例如''{'allnumber':9876}''。 – Liliane

做到这一点你可以这样提取号码:

k = '[:];@;;]wqwww actualnumber 1234 ;;:@##' 
for item in k.split(): 
    if item.isnumeric(): 
     print(item) 

你会用你的条纹线代替。对于条线中的每一行,分割它,并检查分割线中的任何项目是否为数字。 isnumeric()只适用于unicode对象。

with open("test.txt", "r") as f: 
    lines = f.readlines() 
    stripped_lines = [line.strip() for line in lines] 

words = ['actualnumber', 'allnumber', 'best'] 
found = {} 
for line in stripped_lines: 
    current_line = line.split() 
    for position, item in enumerate(current_line): 
     if item in words: 
      found[item] = current_line[position + 1] 

现在,你有他们在字典中,您可以访问它们为:found['actualnumber']。并进行进一步的处理,例如将它们存储在数据库中。

最简单的方法是使用isdigit()

f = open('test.txt') 
data = f.read() 
[int(s) for s in data.split() if s.lstrip("-").isdigit()] 

输出:

[1234, 9876, 56] 
+0

如果数字是负数,该怎么办? ''“-1”.isdigit()''返回''False''。 – Liliane

+0

@Liliane在这种情况下,您可以使用lsstrip(“ - ”) –

word = ["actualnumber", "potential", "time"] 
    with open("./abx.txt") as file: 
     temp_list = [line.strip() for line in file.readlines()] 
     list_val = [item for item in temp_list if any(x in item for x in word)] 
     final_list = [] 
     match_value = ["actualnumber", "allnumber", "best"] 
     if list_val: 
      for val in temp_list: 
      val_list = val.split(" ") 
      for key, value in enumerate(val_list): 
       if value in match_value: 
        final_list.append(val_list[key+1]) 

     print(final_list): 

,并在结束时,你可以遍历列表,并找出你的预期值。