Mathematica列表-搜索级别2和返回级别1? [英] Mathematica Lists - Search Level Two and Return Level One?

查看:110
本文介绍了Mathematica列表-搜索级别2和返回级别1?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在列表的第二级中进行字符串匹配,但是在第一级中需要返回真实的案例(第一级中需要对返回值进行分类的信息).

I need to string match in the second level of a list but have true cases returned at the first level (there's information in the first level that I need to categorize the returns).

 First /@ GatherBy[#, #[[3]] &] &@
  Cases[#, x_List /;
   MemberQ[x, s_String /;
    StringMatchQ[s, ("*PHYSICAL EXAMINATION*"), 
     IgnoreCase -> True]], {2}] &@
  Cases[MemoizeTable["Diagnostic_table.txt"], {_, 
   11111, __}]

顶部的GatherBy命令只是按日期组织所有条目,因此我不会得到任何重复.然后,我在诊断表中询问具有与字符串"PHYSICAL EXAMINATION"相匹配的术语的案例.

The GatherBy command at the top is just organizing all the entries by date so I don't get any duplicates. Then I ask for cases within the diagnostic table that have terms matching the string "PHYSICAL EXAMINATION".

我只需要搜索列表的第二级.如果我只搜索第一个,则不会返回所有真实的案例.如果搜索第一和第二个目录,则会得到重复项(某些情况在第一和第二个目录中都包含所需的字符串,因此分别返回列表的第一和第二个目录).

I have to search only the second level of the lists. If I search just the first I don't return all the true cases. If I search the first and second, I get duplicates (some cases include the desired string at both the first and second levels, so the first and second levels of the list are both returned, separately).

我需要在第二级搜索字符串,然后仅返回包含该第二级匹配列表的第一级.我不需要排除第二级,只是不想像在搜索第一级和第二级时一样单独返回它.

I need to search for the string at the second level and then return ONLY the first level of the lists that contain that matched second level. I don't need to exclude the second level, I just don't want it returned separately like it is if I search levels one and two.

任何帮助将不胜感激!

推荐答案

也许是这样?

list = {{a, b, c, {x, y}, d, x}, {a, b, c, d, x}, {{a, b, c, d}, x}}

Select[list, MemberQ[#, x, {2}] &]

输出:

{{{a,b,c,{x,y},d,x}}

{{a, b, c, {x, y}, d, x}}

更新

这也将起作用

Cases[list, _?(MemberQ[#, x, {2}] &)]


更新为@rose问题(请参阅评论)

给出以下数据,如何在第二级(例如,仅在第二级中)中选择字符串中包含单词"PHYSICAL EXAMINATION"的条目,例如在字符串"P-023 PHYSICAL EXAMINATION,TECHNICIAN,NOS"中子列表)? (我对@rose的示例进行了一些修改)

Given the following data how can I select for entries which contain the words "PHYSICAL EXAMINATION" within a string, for example within the string "P-023 PHYSICAL EXAMINATION, TECHNICIAN, NOS", at the second level (ie only within the sublist)? (I have modified @rose's example somewhat)

rdata2={{1111113,21119,SQLDateTime[{2011,1,11,11,11,0.`}],31111,"EB/JW",1,47000,"T-510 CHEEK",{"T-510 CHEEK","No Examination, NOS"},"Text bla bla bla physical examination bla bla"},{1111114,21119,SQLDateTime[{2011,2,11,11,11,0.`}],31112,"EB/JW",1,47000,"T-510 CHEEK",{"T-510 CHEEK","P-023 PHYSICAL EXAMINATION, TECHNICIAN, NOS"},"Text bla bla bla"},
{1111115,21000,SQLDateTime[{2011,1,11,11,11,0.`}],31111,"EB/JW",1,47000,"T-510 CHEEK",{"T-510 CHEEK","P-023 physical examination, TECHNICIAN, NOS"},"Text bla bla bla physical examination bla bla"}};

(1)一种方法(仅返回条目1111114)

(1) One way (returning only entry 1111114)

Select[rdata2, 
 MemberQ[Characters@#, 
   Flatten@{___, Characters["PHYSICAL EXAMINATION"], ___}, {2}] &]

(2)忽略大小写(但仍在子列表中选择)

(2) Ignore case (but still selecting within sublist)

Select[rdata2,MemberQ[ToLowerCase@Characters@#,
Flatten@{___,ToLowerCase@
Characters["PHYSICAL EXAMINATION"],___},{2}]&]

(选择条目1111114和1111115)

(selects for entries 1111114 & 1111115)

(3)最后一个示例(选择子列表中具有无考试"的条目,但在否"和考试"之间可能存在零个或多个字符,并且再次出现这种情况)忽略)

(3) A final example (select for entries with "No Examination" within sublist but where there may be zero or more characters between "No" and "Examination", and where case is again ignored)

Select[rdata2, 
 MemberQ[ToLowerCase@Characters@#, 
   Flatten@Riffle[
     ToLowerCase@Characters@{"No", "Examination"}, ___, {1, -1, 
      2}], {2}] &]

(选择条目1111113)

(selects for entry 1111113)

毫无疑问,这是更有效的进行方式.我希望我已经正确地解释了这个问题.

There are no doubt more efficient ways to proceed. I hope I have interpreted the question correctly.

这篇关于Mathematica列表-搜索级别2和返回级别1?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆