假设我有列表,我已经编辑过,所以它不再被称为“列表”了
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”,我需要将该号码添加到新列表中。
答案 0 :(得分:7)
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 map
和from __future__ import print_function
使py2解决方案与py3完全相同。”)
说明: