如果列表中的项目存在:做的事情

时间:2012-06-01 17:04:26

标签: python regex indexing

假设我有列表,我已经编辑过,所以它不再被称为“列表”了

my_list = ['a b', 'b c d e', 'c', 'd e f g h', 'e f g h i j', 'f g h', 'g h']

我正在尝试检查列表中的特定元素,并查看其中一个元素是否包含某个字符串。我一直在使用以下代码中的内容:

for i in range(len(my_list)):
    splitList = my_list[i].split(' ')
    if splitList[3] == "c":
        print "True"
    else:
        print "False"

但我真正想做的是检查splitList [3]是否存在,如果确实存在,如果它==“c”或只是在元素中打印第3个“东西”。 (我在我的问题上是通用的,但我的实际数据是寻找一个特定的3个字符的字符串)我确定正则表达式可以解决我所有的问题,但我一直在寻找完美的正则表达式解决方案好几天而且不堪重负没有解决方案。我的数据是非常可预测的,我只需要检查列表元素中的第二个单词是否存在。

是否有一种简单的pythonic方法可以检查列表是否在某个特定索引处有什么东西,以及它是否从那里开始?


如果您想建议正则表达式解决方案, 我列表中的第24个元素总是如此 “G#Abc”'#'可以是1-12(含) 然后第25个元素也可以是
“G#Abc”,“#”为1-12 如果第25个元素的格式不是“G#Abc”,那么元素和任何其他元素都不相关。如果格式为“G#Abc”,我需要将该号码添加到新列表中。

3 个答案:

答案 0 :(得分:7)

  

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.

relevant_elements = set()
for values in my_list:
    try:
        elt = values.split()[3]
    except IndexError:
        continue
    else:
        if is_correct_format(elt):
            relevant_elements.add(elt)

答案 1 :(得分:4)

给定一个任意字符串'x y z',将其拆分为带['x', 'y', 'z']的列表'x y z'.split(),测试索引是否存在的简单pythonic方法是len。稍微修改上面的代码:

# don't use `list` as a variable name; it masks the built-in `list` constructor
str_list = ['a b', 'b c d e', 'c', 'd e f g h', 'e f g h i j', 'f g h', 'g h']
for s in str_list:
    split_list = s.split(' ')
    if len(split_list) > 3 and split_list[3] == 'c':
        print "True"
    else:
        print "False"

答案 2 :(得分:4)

使用函数式编程的强大功能。

使用Python2:

from itertools import imap
for i in (x[3] for x in imap(str.split, input_strings) if len(x) >= 4):
     print i

使用Python3:

for i in (x[3] for x in map(str.split, input_strings) if len(x) >= 4):
     print(i)

(由@thg435提及:“您可以使用from future_builtins import mapfrom __future__ import print_function使py2解决方案与py3完全相同。”)

说明:

  • str.split是一个函数,它将输入分割为(运行)空格字符。
  • map resp。 imap将其应用于列表的所有成员。这两个函数都生成generator
  • if len(x) >= 4测试是否存在第四个项目(位于索引3)。
  • (x[3] for x in ... if ...)生成一个生成器,它接受拆分字符串列表的第四个元素。