title: Python: "breaking out" of if statement inside a for loop
body: <p>I understand that one cannot "break" an if statement and only from a loop, however, I'm trying to conceptually stop an if statement from evaluating after it finds a "true" the first time when it's inside a for loop.</p>
  
  <pre><code># Import XML Parser
  import xml.etree.ElementTree as ET
  
  # Parse XML directly from the file path
  tree = ET.parse('xml file')
  
  # Create iterable item list
  items = tree.findall('item')
  
  # Create class for historic variables
  class DataPoint:
      def __init__(self, low, high, freq):
          self.low = low
          self.high = high
          self.freq = freq
  
  # Create Master Dictionary and variable list for historic variables
  masterDictionary = {}
  
  # Loop to assign variables as dictionary keys and associate their values with them
  for item in items:
      thisKey = item.find('variable').text
      thisList = []
      masterDictionary[thisKey] = thisList
  
  for item in items:
      thisKey = item.find('variable').text
      newDataPoint = DataPoint(float(item.find('low').text), float(item.find('high').text), float(item.find('freq').text))
      masterDictionary[thisKey].append(newDataPoint)
  
  diceDictionary = {}
  import random
  for thisKey in masterDictionary.keys():
      randomValue = random.random()
      diceList = []
      thisList = []
      diceList = masterDictionary[thisKey]
      diceDictionary[thisKey] = thisList
      for i in range(len(diceList)):
          if randomValue &lt;= sum(i.freq for i in diceList[0:i+1]):         
              print 'O', i, 'randomValue', randomValue, 'prob container', sum(i.freq for i in diceList[0:i+1])
              #diceRoll = random.uniform(diceList[i].low, diceList[i].high)
              #diceDictionary[thisKey].append(diceRoll)
          else:
              print 'X', i, 'randomValue', randomValue, 'prob container', sum(i.freq for i in diceList[0:i+1])
  </code></pre>
  
  <p>There are two keys in the masterDictionary and each one contains a list of 27 and 29 data points respectively. Therefore, the loop</p>
  
  <pre><code>for i in range(len(diceList)):
  </code></pre>
  
  <p>will run i from 0 - 26 and 0 - 28 for each key. This is great, but the problem when the if statement is evaluated is that once it is found, it will subsequently be true for all of the following range items. Here is the print output:</p>
  
  <pre><code>X 0 randomValue 0.0775612781213 prob container 0.0294117647059
  X 1 randomValue 0.0775612781213 prob container 0.0294117647059
  X 2 randomValue 0.0775612781213 prob container 0.0294117647059
  X 3 randomValue 0.0775612781213 prob container 0.0294117647059
  O 4 randomValue 0.0775612781213 prob container 0.147058823529
  O 5 randomValue 0.0775612781213 prob container 0.235294117647
  O 6 randomValue 0.0775612781213 prob container 0.441176470588
  O 7 randomValue 0.0775612781213 prob container 0.588235294118
  O 8 randomValue 0.0775612781213 prob container 0.676470588235
  O 9 randomValue 0.0775612781213 prob container 0.764705882353
  O 10 randomValue 0.0775612781213 prob container 0.794117647059
  O 11 randomValue 0.0775612781213 prob container 0.823529411765
  O 12 randomValue 0.0775612781213 prob container 0.823529411765
  O 13 randomValue 0.0775612781213 prob container 0.852941176471
  O 14 randomValue 0.0775612781213 prob container 0.882352941176
  O 15 randomValue 0.0775612781213 prob container 0.882352941176
  O 16 randomValue 0.0775612781213 prob container 0.911764705882
  O 17 randomValue 0.0775612781213 prob container 0.911764705882
  O 18 randomValue 0.0775612781213 prob container 0.911764705882
  O 19 randomValue 0.0775612781213 prob container 0.911764705882
  O 20 randomValue 0.0775612781213 prob container 0.911764705882
  O 21 randomValue 0.0775612781213 prob container 0.941176470588
  O 22 randomValue 0.0775612781213 prob container 0.941176470588
  O 23 randomValue 0.0775612781213 prob container 0.970588235294
  O 24 randomValue 0.0775612781213 prob container 0.970588235294
  O 25 randomValue 0.0775612781213 prob container 0.970588235294
  O 26 randomValue 0.0775612781213 prob container 0.970588235294
  O 27 randomValue 0.0775612781213 prob container 0.970588235294
  O 28 randomValue 0.0775612781213 prob container 1.0
  X 0 randomValue 0.803308376497 prob container 0.0294117647059
  X 1 randomValue 0.803308376497 prob container 0.0294117647059
  X 2 randomValue 0.803308376497 prob container 0.0294117647059
  X 3 randomValue 0.803308376497 prob container 0.0294117647059
  X 4 randomValue 0.803308376497 prob container 0.0294117647059
  X 5 randomValue 0.803308376497 prob container 0.0294117647059
  X 6 randomValue 0.803308376497 prob container 0.0882352941176
  X 7 randomValue 0.803308376497 prob container 0.0882352941176
  X 8 randomValue 0.803308376497 prob container 0.0882352941176
  X 9 randomValue 0.803308376497 prob container 0.117647058824
  X 10 randomValue 0.803308376497 prob container 0.147058823529
  X 11 randomValue 0.803308376497 prob container 0.205882352941
  X 12 randomValue 0.803308376497 prob container 0.264705882353
  X 13 randomValue 0.803308376497 prob container 0.294117647059
  X 14 randomValue 0.803308376497 prob container 0.382352941176
  X 15 randomValue 0.803308376497 prob container 0.441176470588
  X 16 randomValue 0.803308376497 prob container 0.470588235294
  X 17 randomValue 0.803308376497 prob container 0.470588235294
  X 18 randomValue 0.803308376497 prob container 0.529411764706
  X 19 randomValue 0.803308376497 prob container 0.588235294118
  X 20 randomValue 0.803308376497 prob container 0.647058823529
  X 21 randomValue 0.803308376497 prob container 0.764705882353
  O 22 randomValue 0.803308376497 prob container 0.823529411765
  O 23 randomValue 0.803308376497 prob container 0.882352941176
  O 24 randomValue 0.803308376497 prob container 0.970588235294
  O 25 randomValue 0.803308376497 prob container 0.970588235294
  O 26 randomValue 0.803308376497 prob container 1.0
  </code></pre>
  
  <p>Anywhere there is an 'X' means that the if statement was false, and once an 'O' starts, the rest of the statements will always be true because of the increasing size of the prob container (up to 1.0).</p>
  
  <p>What I am looking for is a way to tell my if statement inside the loop to stop once it finds the first true statement, then write to dictionary, and then continue the outer loop again.</p>
  
  <p>Any help appreciated!</p>
  
  <p><strong>UPDATE:</strong></p>
  
  <pre><code>diceDictionary = {}
  x=0 
  while x &lt; 3:
      import random
      for thisKey in masterDictionary.keys():
          randomValue = random.random()
          diceList = []
          thisList = []
          diceList = masterDictionary[thisKey]
          diceDictionary[thisKey] = thisList
          for i in range(len(diceList)):
              if randomValue &lt;= sum(i.freq for i in diceList[0:i+1]):         
                  print 'O', thisKey, i, 'randomValue', randomValue, 'prob container', sum(i.freq for i in diceList[0:i+1])
                  diceRoll = random.uniform(diceList[i].low, diceList[i].high)
                  diceDictionary[thisKey].append(diceRoll)
                  break
              else:
                  print 'X', thisKey, i, 'randomValue', randomValue, 'prob container', sum(i.freq for i in diceList[0:i+1])
      x = x + 1
  print diceDictionary
  </code></pre>
  
  <p>produces:</p>
  
  <pre><code>X inflation 0 randomValue 0.500605733928 prob container 0.0294117647059
  X inflation 1 randomValue 0.500605733928 prob container 0.0294117647059
  X inflation 2 randomValue 0.500605733928 prob container 0.0294117647059
  X inflation 3 randomValue 0.500605733928 prob container 0.0294117647059
  X inflation 4 randomValue 0.500605733928 prob container 0.147058823529
  X inflation 5 randomValue 0.500605733928 prob container 0.235294117647
  X inflation 6 randomValue 0.500605733928 prob container 0.441176470588
  O inflation 7 randomValue 0.500605733928 prob container 0.588235294118
  X stock 0 randomValue 0.392225720409 prob container 0.0294117647059
  X stock 1 randomValue 0.392225720409 prob container 0.0294117647059
  X stock 2 randomValue 0.392225720409 prob container 0.0294117647059
  X stock 3 randomValue 0.392225720409 prob container 0.0294117647059
  X stock 4 randomValue 0.392225720409 prob container 0.0294117647059
  X stock 5 randomValue 0.392225720409 prob container 0.0294117647059
  X stock 6 randomValue 0.392225720409 prob container 0.0882352941176
  X stock 7 randomValue 0.392225720409 prob container 0.0882352941176
  X stock 8 randomValue 0.392225720409 prob container 0.0882352941176
  X stock 9 randomValue 0.392225720409 prob container 0.117647058824
  X stock 10 randomValue 0.392225720409 prob container 0.147058823529
  X stock 11 randomValue 0.392225720409 prob container 0.205882352941
  X stock 12 randomValue 0.392225720409 prob container 0.264705882353
  X stock 13 randomValue 0.392225720409 prob container 0.294117647059
  X stock 14 randomValue 0.392225720409 prob container 0.382352941176
  O stock 15 randomValue 0.392225720409 prob container 0.441176470588
  X inflation 0 randomValue 0.146182475695 prob container 0.0294117647059
  X inflation 1 randomValue 0.146182475695 prob container 0.0294117647059
  X inflation 2 randomValue 0.146182475695 prob container 0.0294117647059
  X inflation 3 randomValue 0.146182475695 prob container 0.0294117647059
  O inflation 4 randomValue 0.146182475695 prob container 0.147058823529
  X stock 0 randomValue 0.745100497977 prob container 0.0294117647059
  X stock 1 randomValue 0.745100497977 prob container 0.0294117647059
  X stock 2 randomValue 0.745100497977 prob container 0.0294117647059
  X stock 3 randomValue 0.745100497977 prob container 0.0294117647059
  X stock 4 randomValue 0.745100497977 prob container 0.0294117647059
  X stock 5 randomValue 0.745100497977 prob container 0.0294117647059
  X stock 6 randomValue 0.745100497977 prob container 0.0882352941176
  X stock 7 randomValue 0.745100497977 prob container 0.0882352941176
  X stock 8 randomValue 0.745100497977 prob container 0.0882352941176
  X stock 9 randomValue 0.745100497977 prob container 0.117647058824
  X stock 10 randomValue 0.745100497977 prob container 0.147058823529
  X stock 11 randomValue 0.745100497977 prob container 0.205882352941
  X stock 12 randomValue 0.745100497977 prob container 0.264705882353
  X stock 13 randomValue 0.745100497977 prob container 0.294117647059
  X stock 14 randomValue 0.745100497977 prob container 0.382352941176
  X stock 15 randomValue 0.745100497977 prob container 0.441176470588
  X stock 16 randomValue 0.745100497977 prob container 0.470588235294
  X stock 17 randomValue 0.745100497977 prob container 0.470588235294
  X stock 18 randomValue 0.745100497977 prob container 0.529411764706
  X stock 19 randomValue 0.745100497977 prob container 0.588235294118
  X stock 20 randomValue 0.745100497977 prob container 0.647058823529
  O stock 21 randomValue 0.745100497977 prob container 0.764705882353
  X inflation 0 randomValue 0.332170052306 prob container 0.0294117647059
  X inflation 1 randomValue 0.332170052306 prob container 0.0294117647059
  X inflation 2 randomValue 0.332170052306 prob container 0.0294117647059
  X inflation 3 randomValue 0.332170052306 prob container 0.0294117647059
  X inflation 4 randomValue 0.332170052306 prob container 0.147058823529
  X inflation 5 randomValue 0.332170052306 prob container 0.235294117647
  O inflation 6 randomValue 0.332170052306 prob container 0.441176470588
  X stock 0 randomValue 0.145551106438 prob container 0.0294117647059
  X stock 1 randomValue 0.145551106438 prob container 0.0294117647059
  X stock 2 randomValue 0.145551106438 prob container 0.0294117647059
  X stock 3 randomValue 0.145551106438 prob container 0.0294117647059
  X stock 4 randomValue 0.145551106438 prob container 0.0294117647059
  X stock 5 randomValue 0.145551106438 prob container 0.0294117647059
  X stock 6 randomValue 0.145551106438 prob container 0.0882352941176
  X stock 7 randomValue 0.145551106438 prob container 0.0882352941176
  X stock 8 randomValue 0.145551106438 prob container 0.0882352941176
  X stock 9 randomValue 0.145551106438 prob container 0.117647058824
  O stock 10 randomValue 0.145551106438 prob container 0.147058823529
  {'inflation': [0.028073642645577577], 'stock': [-0.07388514885974767]}
  </code></pre>