Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 510387
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 13, 20262026-05-13T07:06:30+00:00 2026-05-13T07:06:30+00:00

From http://jaynes.colorado.edu/PythonIdioms.html "Build strings as a list and use ”.join at the end. join

  • 0

From http://jaynes.colorado.edu/PythonIdioms.html

"Build strings as a list and use
”.join at the end. join is a string
method called on the separator, not
the list. Calling it from the empty
string concatenates the pieces with no
separator, which is a Python quirk and
rather surprising at first. This is
important: string building with + is
quadratic time instead of linear! If
you learn one idiom, learn this one.

Wrong: for s in strings: result += s

Right: result = ”.join(strings)"

I’m not sure why this is true. If I have some strings I want to join them, for me it isn’t intuitively better to me to put them in a list then call ”.join. Doesn’t putting them into a list create some overhead? To Clarify…

Python Command Line:

>>> str1 = 'Not'
>>> str2 = 'Cool'
>>> str3 = ''.join([str1, ' ', str2]) #The more efficient way **A**
>>> print str3
Not Cool
>>> str3 = str1 + ' ' + str2 #The bad way **B**
>>> print str3
Not Cool

Is A really linear time and B is quadratic time?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-13T07:06:30+00:00Added an answer on May 13, 2026 at 7:06 am

    Yes. For the examples you chose the importance isn’t clear because you only have two very short strings so the append would probably be faster.

    But every time you do a + b with strings in Python it causes a new allocation and then copies all the bytes from a and b into the new string. If you do this in a loop with lots of strings these bytes have to be copied again, and again, and again and each time the amount that has to be copied gets longer. This gives the quadratic behaviour.

    On the other hand, creating a list of strings doesn’t copy the contents of the strings – it just copies the references. This is incredibly fast, and runs in linear time. The join method then makes just one memory allocation and copies each string into the correct position only once. This also takes only linear time.

    So yes, do use the ''.join idiom if you are potentially dealing with a large number of strings. For just two strings it doesn’t matter.

    If you need more convincing, try it for yourself creating a string from 10M characters:

    >>> chars = ['a'] * 10000000
    >>> r = ''
    >>> for c in chars: r += c
    >>> print len(r)
    

    Compared with:

    >>> chars = ['a'] * 10000000
    >>> r = ''.join(chars)
    >>> print len(r)
    

    The first method takes about 10 seconds. The second takes under 1 second.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 385k
  • Answers 385k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer The context information in log4net is per thread, so every… May 14, 2026 at 11:37 pm
  • Editorial Team
    Editorial Team added an answer Make the request dispatcher path absolute - use "/mypage.jsp" rather… May 14, 2026 at 11:37 pm
  • Editorial Team
    Editorial Team added an answer No, you can't do that in Java. The compiler needs… May 14, 2026 at 11:37 pm

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.