我正在寻找一种更有效的方法(如果可用)将列表拆分为两个子列表。原始列表示例:
full_list = ['t1', 't2', 't3', 't4', 't5', 'v1', 'v2']
Run Code Online (Sandbox Code Playgroud)
注意: 通常,原始列表包含任意数量的混合在一起的元素。't1' ... 't5' 仅用于指示第一个子列表的元素:
t_sub_list = ['t1', 't2', 't3', 't4', 't5']
Run Code Online (Sandbox Code Playgroud)
这个子列表是给定的。
我想最有效地生成第二个子列表:
v_sub_list = ['v1', 'v2']
Run Code Online (Sandbox Code Playgroud)
我想到的解决方案是:
v_sub_list_A = [list_element for list_element in full_list if list_element not in t_sub_list]
v_sub_list_B = list(set(full_list) - set(t_sub_list))
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 有没有更有效的方法来做到这一点?或者至少有任何可以以更具代码可读性的方式实现结果的包?
我试图在Python中使用正则表达式来查找和打印多行搜索中的所有匹配行.我正在搜索的文本可能具有以下示例结构:
AAA ABC1 ABC2 ABC3 AAA ABC1 ABC2 ABC3 ABC4 ABC AAA ABC1 AAA
从中我想要检索至少出现一次并且前面有AAA的ABC*.
问题是,尽管该团体抓住了我想要的东西:
match = <_sre.SRE_Match object; span=(19, 38), match='AAA\nABC2\nABC3\nABC4\n'>
Run Code Online (Sandbox Code Playgroud)
...我只能访问该组的最后一场比赛:
match groups = ('AAA\n', 'ABC4\n')
Run Code Online (Sandbox Code Playgroud)
下面是我用于此问题的示例代码.
#! python
import sys
import re
import os
string = "AAA\nABC1\nABC2\nABC3\nAAA\nABC1\nABC2\nABC3\nABC4\nABC\nAAA\nABC1\nAAA\n"
print(string)
p_MATCHES = []
p_MATCHES.append( (re.compile('(AAA\n)(ABC[0-9]\n){1,}')) ) #
matches = re.finditer(p_MATCHES[0],string)
for match in matches:
strout = ''
gr_iter=0
print("match = "+str(match))
print("match groups = "+str(match.groups()))
for group in match.groups():
gr_iter+=1
sys.stdout.write("TEST GROUP:"+str(gr_iter)+"\t"+group) # test …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个可能的单轮返回相当于
'A' in ['A', 'B', 'C']
Run Code Online (Sandbox Code Playgroud)
但在以下情况中:假设我有一个包含列表作为值的字典,例如:
dictionary = {'key1': ['A', 'B', 'C', 'D'],
'key2': ['E', 'F'],
'key3': ['G', 'H', 'I']}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我能得到的最接近的是:
r = {v[0] for k, v in dictionary.items() if 'A' in v}
Run Code Online (Sandbox Code Playgroud)
但是这会返回一组长度为0或1的返回列表元素,以便我检查它的存在.
如果存储在字典值中的任何列表中存在"A",我只想获得True/False.