Reputation: 59
How can I take a large list like this:
line = ['8', '2', '22', '97', '38', '15', '0', '40', '0', '75', '4', '5', '7', '78', '52', '12', '50', '77', '91', '8', '49', '49', '99', '40', '17', '81', '18', '57', '60', '87', '17', '40', '98', '43', '69', '48', '4', '56', '62', '0', '81', '49', '31', '73', '55', '79', '14', '29', '93', '71', '40', '67', '53', '88', '30', '3', '49', '13', '36', '65', '52', '70', '95', '23', '4', '60', '11', '42', '69', '24', '68', '56', '1', '32', '56', '71', '37', '2', '36', '91', '22', '31', '16', '71', '51', '67', '63', '89', '41', '92', '36', '54', '22', '40', '40', '28', '66', '33', '13', '80', '24', '47', '32', '60', '99', '3', '45', '2', '44', '75', '33', '53', '78', '36', '84', '20', '35', '17', '12', '50', '32', '98', '81', '28', '64', '23', '67', '10', '26', '38', '40', '67', '59', '54', '70', '66', '18', '38', '64', '70', '67', '26', '20', '68', '2', '62', '12', '20', '95', '63', '94', '39', '63', '8', '40', '91', '66', '49', '94', '21', '24', '55', '58', '5', '66', '73', '99', '26', '97', '17', '78', '78', '96', '83', '14', '88', '34', '89', '63', '72', '21', '36', '23', '9', '75', '0', '76', '44', '20', '45', '35', '14', '0', '61', '33', '97', '34', '31', '33', '95', '78', '17', '53', '28', '22', '75', '31', '67', '15', '94', '3', '80', '4', '62', '16', '14', '9', '53', '56', '92', '16', '39', '5', '42', '96', '35', '31', '47', '55', '58', '88', '24', '0', '17', '54', '24', '36', '29', '85', '57', '86', '56', '0', '48', '35', '71', '89', '7', '5', '44', '44', '37', '44', '60', '21', '58', '51', '54', '17', '58', '19', '80', '81', '68', '5', '94', '47', '69', '28', '73', '92', '13', '86', '52', '17', '77', '4', '89', '55', '40', '4', '52', '8', '83', '97', '35', '99', '16', '7', '97', '57', '32', '16', '26', '26', '79', '33', '27', '98', '66', '88', '36', '68', '87', '57', '62', '20', '72', '3', '46', '33', '67', '46', '55', '12', '32', '63', '93', '53', '69', '4', '42', '16', '73', '38', '25', '39', '11', '24', '94', '72', '18', '8', '46', '29', '32', '40', '62', '76', '36', '20', '69', '36', '41', '72', '30', '23', '88', '34', '62', '99', '69', '82', '67', '59', '85', '74', '4', '36', '16', '20', '73', '35', '29', '78', '31', '90', '1', '74', '31', '49', '71', '48', '86', '81', '16', '23', '57', '5', '54', '1', '70', '54', '71', '83', '51', '54', '69', '16', '92', '33', '48', '61', '43', '52', '1', '89', '19', '67', '48']
and make it to where after every twentieth number it joins it with a semi colon and space, ('; ') and every other time it just joins it with a space?
It would look something like this except larger:
"8 22 2 97; 58 33 44 82; 86..." and so on.
Upvotes: 2
Views: 585
Reputation: 3277
method 1
modulus gives you the division remainder; so create a blank string, add every item in list and seperate by space or semicolon depending on item number:
new_string = ''
z= len(line)
for i in range(z):
new_string += (line[i])
if (i%20==0) and (z>i>0):
new_string += '; '
else:
new_string += ' '
print new_string
method 2
first add semicolon to every 20th item in list; then convert to string and remove commas and quotes:
for i in range(1,(len(line)-1)):
if i%20==0: line[i]+=';'
line = (((str(line)[:-1:])[1:]).replace("'",'')).replace(",",'')
Upvotes: 0
Reputation: 343
string = ''
for a in line: string+= a+'?' if (line.index(a)+1) % 20 else a+'!'
print(string)
simple as this!
Upvotes: 0
Reputation: 8921
Simple iteration approach:
counter = 0
result = ""
for num in line:
counter += 1
result += str(num)
if counter == 20:
result += ";"
counter = 0
result += " "
Basically we go through each element of the list, joining it to the result
string. Using the counter
var, we can add a semicolon every 20 iterations by checking if it's value is 20 each time around. Once it reaches 20, we add the semicolon and reset its value to 0.
Upvotes: 0
Reputation: 1167
Something like this, maybe?
def joinit(line, n):
return ': '.join(' '.join(line[i:i+n]) for i in range(0, len(line), n))
Join a section of length n
: ' '.join(line[i:i+n])
,
Doing this for all the sections, and join the resulting list with the second delimiter, ': '
.
Upvotes: 1
Reputation: 6360
Using an enumeration of your line list
, you can use the index to specify when it should be a ;
on multiples of 20...
joined = ''
for i, num in enumerate(line):
joined += str(num)
joined += ' ' if (i + 1) % 20 != 0 else '; '
Upvotes: 0
Reputation: 140196
easy with a list comprehension and 2 nested str.join
:
"; ".join([" ".join(line[i:i+20]) for i in range(0,len(line),20)])
You slice the list to take every 20 elements for the inner part, to create the list of space separated strings, and join the resulting list with your "outer" separator.
It works even if the list size isn't dividable by 20 and is super fast
(note that I'm forcing list creation for the outside join
because join
needs to create a list anyway. It's faster than passing a generator comprehension in that case)
Upvotes: 4
Reputation: 1410
You can do something like:
length = 20
result = '; '.join((' '.join(line[idx: idx + length]) for idx in range(len(line) - n)))
Upvotes: -1