Help to understand list/string methods.
Hello, is there a way to mutate strings in Python?
Algorithm complexity with strings and slices
The python page on time-complexity shows that slicing lists has a time-complexity of O(k), where "k" is the length of the slice. That's for lists, not strings, but the complexity can't be O(1) for strings since the slicing must handle more characters as the size is increased. At a guess, the complexity of slicing strings would also be O(k). We can write a little bit of code to test that guess:
import time
StartSize = 2097152
size = StartSize
for _ in range(10):
# create string of size "size"
s = '*' * size
# now time reverse slice
start = time.time()
r = s[::-1]
delta = time.time() - start
print(f'Size {size:9d}, time={delta:.3f}')
# double size of the string
size *= 2This uses a simple method of timing. Other tools exist, but this is simple. When run I get:
$ python3 test.py Size 2097152, time=0.006 Size 4194304, time=0.013 Size 8388608, time=0.024 Size 16777216, time=0.050 Size 33554432, time=0.098 Size 67108864, time=0.190 Size 134217728, time=0.401 Size 268435456, time=0.808 Size 536870912, time=1.610 Size 1073741824, time=3.192
which shows the time doubles when doubling the size of the string for each reverse slice. So O(n) (k == n for whole-string slicing).
Edit: spelling.
More on reddit.comOutlier Detection Methods For Strings?
How to assign a string in Python?
How to cut a string in Python?
What are the uses of a string in Python?
Hello, I am currently learning to python with the book "Python for everybody". I have just done this excercise:
Exercise 5: Minimalist Email Client.MBOX (mail box) is a popular file format to store and share a collection of emails. This was used by early email servers and desktop apps. Without getting into too many details, MBOX is a text file, whichstores emails consecutively. Emails are separated by a special line which starts with From (notice the space). Importantly, lines starting with From: (notice the colon) describes the email itself and does not act as a separator. Imagine you wrote a minimalist email app, that lists the email of the senders in the user’s Inbox and counts the number of emails. Write a program to read through the mail box data and when you find line that starts with “From”, you will split the line into words using the split function. We are interested in who sent the message, which is the second word on the From line.
From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008
You will parse the From line and print out the second word for each From line, then you will also count the number of From (not From:) lines and print out a count at the end. This is a good sample outputwith a few lines removed
:python fromcount.py
Enter a file name: mbox-short.txt
stephen.marquard@uct.ac.za
louis@media.berkeley.edu
zqian@umich.edu
[...some output removed...
*]*ray@media.berkeley.edu
cwen@iupui.edu
cwen@iupui.edu
cwen@iupui.edu
There were 27 lines in the file with From as the first word
This is my code:
fhand = open(input('Please enter a file name: '))count = 0for line in fhand :if line.startswith('From ') :count += 1line.rstrip()print(line.split(' ')[1])print('There were', count, 'lines in the file with From as the first word')
I get a correct output, though, this excercise is at the end of a chapter Lists and, as far as I understand, my code does not create any(?). Could you suggest how to rewrite it using a list (for me to better understand the list/string methods).