设置向上
我正在使用Scrapy抓取公寓广告。对于某些住房特征,我循环遍历每个广告获得的列表BC
的元素。如果特征在列表中,我指定“是”,如果不是“否”。 E.g。
for x in BC:
if 'Terraza' in x:
terrace = 'yes'
break
else:
terrace = 'no'
对于每个'是 - 否'特征,我都有上述循环的副本。
<小时/> 的问题
除了循环遍历列表的元素之外,我还想循环遍历特征本身。即我想将每个特征的所有循环“合并”到一个循环中。
我尝试了以下内容(我的实际bcl
确实包含多个元素):
found = False
bcl = ['Terraza']
for x in l: # l is a list of strings containing housing characteristics
for y in bcl:
if y in x:
y = 'yes'
found = True
break
else:
y = 'no'
if found:
break
terrace = Terrazza
但是这个循环不会创建变量Terrazza
。我不确定我能用全局变量解决这个问题。
如何使这个循环起作用?
答案 0 :(得分:0)
你的问题不在于合并循环,而在于从外循环中断开。您可以通过引发自定义异常然后尝试捕获它来突破顶部循环。看看这段代码的和平:
public class Bucket extends Class1 {
LinkedList<String> linkedList;
public Bucket(){
super(new LinkedList<String>());
//now typecast and assign collection to linkedList
linkedList = (LinkedList<String>)collection;
}
public String getFirst() {
return linkedList.getFirst();
}
}
答案 1 :(得分:0)
根据需要的结果,您可能采取不同的方法。在这种情况下,我倾向于使用更具功能性的编码风格。我不确定这是否是你想要的,但我认为你可以这样做:
list_characteristics = ['Terraza', "Swimming pool"] # sample ad text - list of strings
bcl = ["test1", "test2", "Terraza", "test3"] # sample checklist - list of strings
def check_characteristics(checklist, adlist):
list_of_found_items = []
for characteristic in list_characteristics:
print("characteristic:", characteristic)
for item in bcl:
print("item:", item)
if item in characteristic:
list_of_found_items.append(item)
return list_of_found_items
result_list = check_characteristics(bcl, list_characteristics)
print("This ad has the following characteristics:", result_list)
使用上面的代码,你有一个函数,它接受两个字符串列表并列出找到的所有项目。如果您想知道其中是否至少有一个,您可以使用其他功能作为更快,更短的方式:
list_characteristics = ['Terraza', "Swimming pool"] # ad text - list of strings
bcl = ["test1", "test2", "Terraza", "test3"] # checklist - list of strings
def has_any_characteristic(checklist, adlist):
for characteristic in list_characteristics:
for item in bcl:
if item in characteristic:
return True
return False
result = has_any_characteristic(bcl, list_characteristics)
print("This ad has at least one of the wanted characteristics?", result)
看起来好像很多代码,但你只需编码一次,然后你就可以随时使用它,以简洁易读的方式,恕我直言。这两个函数的定义甚至可以放在您需要的单独模块中。因此,在主代码中,您只需要使用一行来调用该函数。每个函数都允许以易于理解的方式回答一个简单的问题,如上面两个代码示例中的print()
语句所示。