Python and STL efficiency

Pebblestone hadeshuang at gmail.com
Fri Aug 25 20:00:18 EDT 2006


Ruby is also not far away :-)

Here's my code:

++++++++++++++++++++++++++++++++++++++++
require 'time'

def f
  a = []
  1000000.times do
    a.push "What do you know"
    a.push "so long ..."
    a.push "chicken crosses road"
    a.push "fool"
  end
  b = a.uniq
  b.each do |x|
    puts x
  end
end

def f2
  a = Array.new(4000000)
  1000000.times do |i|
    a[i] = "What do you know"
    a[i+1] = "so long ..."
    a[i+2] = "chicken crosses road"
    a[i+3] = "fool"
  end
  b = a.uniq
  b.each do |x|
    puts x
  end
end


f_start = Time.now
f
f_end = Time.now

f2_start = Time.now
f2
f2_end = Time.now

puts "f: Elapsed time: #{f_end - f_start} sec."
puts "f2: Elapsed time: #{f2_end - f_start} sec."

++++++++++++++++++++++++++++++++++++++++++

And the benchmark result:

What do you know
so long ...
chicken crosses road
fool
What do you know
so long ...
chicken crosses road
fool
nil
f: Elapsed time: 3.600294 sec.
f2: Elapsed time: 11.182927 sec.

++++++++++++++++++++++++++++++++++++++++++

I like ruby because its purity. :p



Licheng Fang wrote:
> Hi, I'm learning STL and I wrote some simple code to compare the
> efficiency of python and STL.
>
> //C++
> #include <iostream>
> #include <string>
> #include <vector>
> #include <set>
> #include <algorithm>
> using namespace std;
>
> int main(){
> 	vector<string> a;
> 	for (long int i=0; i<10000 ; ++i){
> 		a.push_back("What do you know?");
> 		a.push_back("so long...");
> 		a.push_back("chicken crosses road");
> 		a.push_back("fool");
> 	}
> 	set<string> b(a.begin(), a.end());
> 	unique_copy(b.begin(), b.end(), ostream_iterator<string>(cout, "\n"));
> }
>
> #python
> def f():
> 	a = []
> 	for i in range(10000):
> 		a.append('What do you know')
> 		a.append('so long...')
> 		a.append('chicken crosses road')
> 		a.append('fool')
> 	b = set(a)
> 	for s in b:
> 		print s
>
> I was using VC++.net and IDLE, respectively. I had expected C++ to be
> way faster. However, while the python code gave the result almost
> instantly, the C++ code took several seconds to run! Can somebody
> explain this to me? Or is there something wrong with my code?




More information about the Python-list mailing list