Trying to iterate my function many times using i
i think you are looking for this
sample_gamma <- function(alpha, beta, n, iter) {
mean_s = c()
mean_sd = c()
for(i in 1:iter){
a = rgamma(n, shape = alpha, scale = 1/beta)
print(c(mean(a), sd(a)))
}
}
Modifying size of iterable during for loop - how is looping determined?
The loop executes till iterable says it has no more elements. After two cycles, the iterable has gone through two elements, and has lost two elements, which means it is at its end, and the loop terminates.
Your code is equivalent to this:
y = [1, 2, 3, 4]
i = iter(y)
while True:
try:
x=next(i)
except StopIteration:
break
print(y)
print(y.pop(0))
The list iterator holds the index that is up to be read next. In the third cycle, the list is [3, 4]
, and next(i)
would be needing to read y[2]
, which is not possible, so next
raises StopIteration
, which ends the loop.
EDIT As to your other questions:
How do
iter
andStopIteration
, and__getitem__(i)
andIndexError
factor in?
The first two are as described above: it is what defines a for
loop. Or, if you will, it is the contract of iter
: it will yield stuff till it stops with StopIteration
.
The latter two, I don't think participate at all, since the list iterator is implemented in C; for example, the check for whether the iterator is exhausted directly compares the current index with PyList_GET_SIZE
, which directly looks at ->ob_size
field; it doesn't pass through Python any more. Obviously, you could make a list iterator that would be fully in pure Python, and you'd likely be either using len
to perform the check, or catching IndexError
and again letting the underlying C code perform the check against ->ob_size
.
What about iterators that aren't lists?
You can define any object to be iterable. When you call iter(obj)
, it is the same as calling obj.__iter__()
. This is expected to return an iterator, which knows what to do with i.__next__()
(which is what next(i)
translates to). I believe dicts iterate (I think, haven't checked) by having an index into the list of its keys. You can make an iterator that will do anything you want, if you code it. For example:
class AlwaysEmpty:
def __iter__(self):
return self
def __next__(self):
raise StopIteration
for x in AlwaysEmpty():
print("there was something")
will, predictably, print nothing.
And most importantly, is this / where is this in the docs?
Iterator Types
array.forEach running faster than native iteration? How?
There are many iteration optimizations that your for
loop is missing such as:
- cache the array length
- iterate backwards
- use ++counter instead of counter++
These are the ones that I have heard of and used, I am sure there are more. If memory serves me correct, the backwards iterating while loop is the fastest of all looping structures (in most browsers).
See this jsperf for some examples.
Edit:
links for postfix vs prefix perf test and iterating backwards.
I was not able to find my reference for using +=1 instead of ++, so I have removed it from the list.
GoTo Next Iteration in For Loop in java
continue;
continue;
key word would start the next iteration upon invocation
For Example
for(int i= 0 ; i < 5; i++){
if(i==2){
continue;
}
System.out.print(i);
}
This will print
0134
See
- Document
For loop with an else and one iteration
As user2357112 mentions, and as stated in the Python docs here
a loop’s else clause runs when no break occurs
You could try something along the lines of:
def searchContact(self, search_name):
contact_found = False
print("Your search matched the following:")
for contact in self.contacts:
if search_name in contact.name:
contact_found = True
print(contact)
if not contact_found:
print("Sorry that contact does not exist!!")
Related Topics
Hardcoded "Require 'Debug'" Can't Find the Sourcefile
Rubymine: Expected ; or End of Line Error After Some Colon
Instance_Eval Does Not Work with Do/End Block, Only with {}-Blocks
What Is a More Ruby-Like Way of Doing This Command
Update Field Through Link_To in Rails
Can't Dup Nilclass on Association Methods
How to Read a Clients Windows Login Name Using Ruby on Rails
Uploading New Products with Multiple Variant Options
Bootstrap Modal in Ruby on Rails Not Working
How to Create Automatically a Instance of Every Class in a Directory
Ruby Parenthesis Syntax Exception with I++ ++I
Incompatible Character Encoding in Rails - How to Just Fail/Skip Sensibly
Make User-Inputted Url into External Link in Rails
Using Poltergeist with a Proxy
How to Download File from Google Drive API with Service Account
How to Get Repeated Elements from Ruby Array
How to 'Join' an Array Adding to the Beginning of the Resulting String the First Character to Join