而不是重复循环多次'合并'成一个

时间:2017-04-28 16:12:37

标签: python loops for-loop

设置向上

我正在使用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。我不确定我能用全局变量解决这个问题。

如何使这个循环起作用?

2 个答案:

答案 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()语句所示。