我不知道我做错了什么,但我的for循环没有按照我想要的方式工作。
import re
liste = ["train_seg/aoi105_c1_20_A", "train_seg/aoi105_c1_30_A", "train_seg/aoi105_c1_30_B",
"train_seg/aoi98_c1_20_A", "train_seg/aoi98_c1_30_A", "train_seg/aoi98_c1_30_B",
"train_classes/aoi98_c1_20_A", "train_classes/aoi98_c1_30_A", "train_classes/aoi98_c1_30_B",
"train_classes/aoi105_c1_20_A", "train_classes/aoi105_c1_30_A", "train_classes/aoi105_c1_30_B"]
cat = ["c1"]
seg = ["20", "30"]
com = ["A", "B"]
for x in cat:
for y in seg:
for z in com:
if y == "20" and z == "B":
continue
#print(x,y,z)
for s in liste:
if all(a in s for a in ["aoi105", x, y, z]):
#print(s)
if re.findall("train_seg", s):
print(s)
if re.findall("train_classes", s):
print(s)
if all(a in s for a in ["aoi98", x, y, z]):
#print(s)
if re.findall("train_seg", s):
print(s)
if re.findall("train_classes", s):
print(s)我希望列表中的元素"liste“按以下顺序计算:
train_seg/aoi105_c1_20_A
train_classes/aoi105_c1_20_A
train_seg/aoi98_c1_20_A
train_classes/aoi98_c1_20_A
train_seg/aoi105_c1_30_A
train_classes/aoi105_c1_30_A
train_seg/aoi98_c1_30_A
train_classes/aoi98_c1_30_A
train_seg/aoi105_c1_30_B
train_classes/aoi105_c1_30_B
train_seg/aoi98_c1_30_B
train_classes/aoi98_c1_30_B为什么每一行都没有按正确的顺序进行评估?我希望train_seg和train_classes首先对每个数字进行评估。谢谢!
发布于 2021-06-14 08:30:16
答案很简单。你差点就成功了。你增加了额外的打印语句,这导致了问题的出现。
import re
cat = ["c1"]
seg = ["20", "30"]
com = ["A", "B"]
tag = ["aoi105","aoi98"]
for x in cat:
for y in seg:
for z in com:
for i in tag:
if y == "20" and z == "B":
continue
for s in liste:
train_seg = f'''train_seg/{i}_{x}_{y}_{z}'''
train_classes = f'''train_classes/{i}_{x}_{y}_{z}'''
if re.findall(train_seg, s): print(s)
if re.findall(train_classes, s): print(s)发布于 2021-06-14 08:52:45
像这样循环,有那么多级别的嵌套循环,是以正确的顺序获得项目的一种迂回方式。它可能通过在for s in liste:之前添加第二个if all(a in s for a in ["aoi98", x, y, z]):来工作。
但我认为有一个更好的方法:显式地按所需的顺序对项目进行排序。类似这样的内容(为错误的变量命名道歉,这是由于我对问题域缺乏了解造成的):
(编辑:更清晰和更短)
import re
liste = ["train_seg/aoi105_c1_20_A", "train_seg/aoi105_c1_30_A", "train_seg/aoi105_c1_30_B",
"train_seg/aoi98_c1_20_A", "train_seg/aoi98_c1_30_A", "train_seg/aoi98_c1_30_B",
"train_classes/aoi98_c1_20_A", "train_classes/aoi98_c1_30_A", "train_classes/aoi98_c1_30_B",
"train_classes/aoi105_c1_20_A", "train_classes/aoi105_c1_30_A", "train_classes/aoi105_c1_30_B"]
TRAIN_TYPES_ORDER = ['train_seg', 'train_classes']
AOIS_ORDER = ['aoi105', 'aoi98']
CATS_ORDER = ['c1']
SEGS_ORDER = ['20', '30']
COMS_ORDER = ['A', 'B']
def sort_key(item):
train_type, aoi, cat, seg, com = re.fullmatch(r'(.*)/(.*)_(.*)_(.*)_(.*)', item).groups()
return (
COMS_ORDER.index(com),
SEGS_ORDER.index(seg),
CATS_ORDER.index(cat),
AOIS_ORDER.index(aoi),
TRAIN_TYPES_ORDER.index(train_type),
)
sorted_items = sorted(liste, key=sort_key)
for item in sorted_items:
print(item)https://stackoverflow.com/questions/67966825
复制相似问题