Displaying elements of a list, in columns
$begingroup$
I have a list of strings. I need to list them in rows and columns. Each row should not have more than "cols" number of values. Each of the values in a given row should be "step" away from the previous value. The values should appear only once in the output. Here is what I have. Any better way to write this code?
cols = 4
step = 10
vlist = ["Value" + str(i+1) for i in range(100)]
vlen = len(vlist)
start = 0
while start < vlen and start < step:
num = 0
for idx in range(start, vlen, step):
if num < cols:
print(vlist[idx], end=", ")
num += 1
print("n")
start += 1
python python-3.x formatting
New contributor
$endgroup$
add a comment |
$begingroup$
I have a list of strings. I need to list them in rows and columns. Each row should not have more than "cols" number of values. Each of the values in a given row should be "step" away from the previous value. The values should appear only once in the output. Here is what I have. Any better way to write this code?
cols = 4
step = 10
vlist = ["Value" + str(i+1) for i in range(100)]
vlen = len(vlist)
start = 0
while start < vlen and start < step:
num = 0
for idx in range(start, vlen, step):
if num < cols:
print(vlist[idx], end=", ")
num += 1
print("n")
start += 1
python python-3.x formatting
New contributor
$endgroup$
$begingroup$
Welcome to Code Review! IsEach [value] should be "step" away from the previous value
an "external" requirement? ((Block-) Quote the specification of the result to achieve.) Another interpretation is In a monospace font, each value shall be output 10 places to the right of the preceding one, the advantage being all values getting displayed.
$endgroup$
– greybeard
yesterday
add a comment |
$begingroup$
I have a list of strings. I need to list them in rows and columns. Each row should not have more than "cols" number of values. Each of the values in a given row should be "step" away from the previous value. The values should appear only once in the output. Here is what I have. Any better way to write this code?
cols = 4
step = 10
vlist = ["Value" + str(i+1) for i in range(100)]
vlen = len(vlist)
start = 0
while start < vlen and start < step:
num = 0
for idx in range(start, vlen, step):
if num < cols:
print(vlist[idx], end=", ")
num += 1
print("n")
start += 1
python python-3.x formatting
New contributor
$endgroup$
I have a list of strings. I need to list them in rows and columns. Each row should not have more than "cols" number of values. Each of the values in a given row should be "step" away from the previous value. The values should appear only once in the output. Here is what I have. Any better way to write this code?
cols = 4
step = 10
vlist = ["Value" + str(i+1) for i in range(100)]
vlen = len(vlist)
start = 0
while start < vlen and start < step:
num = 0
for idx in range(start, vlen, step):
if num < cols:
print(vlist[idx], end=", ")
num += 1
print("n")
start += 1
python python-3.x formatting
python python-3.x formatting
New contributor
New contributor
edited yesterday
200_success
130k17153419
130k17153419
New contributor
asked yesterday
RebornCodeLoverRebornCodeLover
262
262
New contributor
New contributor
$begingroup$
Welcome to Code Review! IsEach [value] should be "step" away from the previous value
an "external" requirement? ((Block-) Quote the specification of the result to achieve.) Another interpretation is In a monospace font, each value shall be output 10 places to the right of the preceding one, the advantage being all values getting displayed.
$endgroup$
– greybeard
yesterday
add a comment |
$begingroup$
Welcome to Code Review! IsEach [value] should be "step" away from the previous value
an "external" requirement? ((Block-) Quote the specification of the result to achieve.) Another interpretation is In a monospace font, each value shall be output 10 places to the right of the preceding one, the advantage being all values getting displayed.
$endgroup$
– greybeard
yesterday
$begingroup$
Welcome to Code Review! Is
Each [value] should be "step" away from the previous value
an "external" requirement? ((Block-) Quote the specification of the result to achieve.) Another interpretation is In a monospace font, each value shall be output 10 places to the right of the preceding one, the advantage being all values getting displayed.$endgroup$
– greybeard
yesterday
$begingroup$
Welcome to Code Review! Is
Each [value] should be "step" away from the previous value
an "external" requirement? ((Block-) Quote the specification of the result to achieve.) Another interpretation is In a monospace font, each value shall be output 10 places to the right of the preceding one, the advantage being all values getting displayed.$endgroup$
– greybeard
yesterday
add a comment |
3 Answers
3
active
oldest
votes
$begingroup$
Fancy iteration in Python is often made easier using the itertools
module. For this case, itertools.islice()
can help pick out the values for each row.
from itertools import islice
cols = 4
step = 10
vlist = ["Value" + str(i+1) for i in range(100)]
for row in range(step):
print(', '.join(islice(vlist, row, cols * step, step)), end=", nn")
$endgroup$
$begingroup$
Thanks for the compact code.
$endgroup$
– RebornCodeLover
yesterday
add a comment |
$begingroup$
The code can be made more understandable by:
- introducing row and column indices
- replace the while loop with a for loop
- calculate the index for
vlist
from the values of the row/col indices
This reduces the number of help variables needed and could result in something like this:
vlist = ["Value" + str(i+1) for i in range(100)]
cols = 4
rows = 10
for row_idx in range(rows):
for col_idx in range(cols):
idx = row_idx + rows * col_idx
print(vlist[idx], end=", ")
print("n")
$endgroup$
$begingroup$
Thanks Jan. I used this approach as well. But your code looks cleaner :)
$endgroup$
– RebornCodeLover
yesterday
add a comment |
$begingroup$
It can be solved by using the slice object.
From Python documentation:
slice - An object usually containing a portion of a sequence. A slice is created using the subscript notation, with colons between numbers
when several are given, such as in variable_name[1:3:5]. The bracket
(subscript) notation uses slice objects internally.
cols = 4
step = 10
vlist = ["Value" + str(i+1) for i in range(100)]
end = step * cols
for start in range(step):
print(', '.join(vlist[start:end:step]))
Output
Value1, Value11, Value21, Value31
Value2, Value12, Value22, Value32
Value3, Value13, Value23, Value33
Value4, Value14, Value24, Value34
Value5, Value15, Value25, Value35
Value6, Value16, Value26, Value36
Value7, Value17, Value27, Value37
Value8, Value18, Value28, Value38
Value9, Value19, Value29, Value39
Value10, Value20, Value30, Value40
New contributor
$endgroup$
$begingroup$
Thank you @MinMax. 200_success also gave the same answer earlier.
$endgroup$
– RebornCodeLover
11 hours ago
$begingroup$
@RebornCodeLover It is different. @200_success uses theislice
fromitertools
. I use built-in slice. But yes, they are similar in other ways.
$endgroup$
– MiniMax
11 hours ago
$begingroup$
True. Yes I like it. Thanks
$endgroup$
– RebornCodeLover
10 hours ago
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
RebornCodeLover is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f215556%2fdisplaying-elements-of-a-list-in-columns%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
Fancy iteration in Python is often made easier using the itertools
module. For this case, itertools.islice()
can help pick out the values for each row.
from itertools import islice
cols = 4
step = 10
vlist = ["Value" + str(i+1) for i in range(100)]
for row in range(step):
print(', '.join(islice(vlist, row, cols * step, step)), end=", nn")
$endgroup$
$begingroup$
Thanks for the compact code.
$endgroup$
– RebornCodeLover
yesterday
add a comment |
$begingroup$
Fancy iteration in Python is often made easier using the itertools
module. For this case, itertools.islice()
can help pick out the values for each row.
from itertools import islice
cols = 4
step = 10
vlist = ["Value" + str(i+1) for i in range(100)]
for row in range(step):
print(', '.join(islice(vlist, row, cols * step, step)), end=", nn")
$endgroup$
$begingroup$
Thanks for the compact code.
$endgroup$
– RebornCodeLover
yesterday
add a comment |
$begingroup$
Fancy iteration in Python is often made easier using the itertools
module. For this case, itertools.islice()
can help pick out the values for each row.
from itertools import islice
cols = 4
step = 10
vlist = ["Value" + str(i+1) for i in range(100)]
for row in range(step):
print(', '.join(islice(vlist, row, cols * step, step)), end=", nn")
$endgroup$
Fancy iteration in Python is often made easier using the itertools
module. For this case, itertools.islice()
can help pick out the values for each row.
from itertools import islice
cols = 4
step = 10
vlist = ["Value" + str(i+1) for i in range(100)]
for row in range(step):
print(', '.join(islice(vlist, row, cols * step, step)), end=", nn")
edited yesterday
answered yesterday
200_success200_success
130k17153419
130k17153419
$begingroup$
Thanks for the compact code.
$endgroup$
– RebornCodeLover
yesterday
add a comment |
$begingroup$
Thanks for the compact code.
$endgroup$
– RebornCodeLover
yesterday
$begingroup$
Thanks for the compact code.
$endgroup$
– RebornCodeLover
yesterday
$begingroup$
Thanks for the compact code.
$endgroup$
– RebornCodeLover
yesterday
add a comment |
$begingroup$
The code can be made more understandable by:
- introducing row and column indices
- replace the while loop with a for loop
- calculate the index for
vlist
from the values of the row/col indices
This reduces the number of help variables needed and could result in something like this:
vlist = ["Value" + str(i+1) for i in range(100)]
cols = 4
rows = 10
for row_idx in range(rows):
for col_idx in range(cols):
idx = row_idx + rows * col_idx
print(vlist[idx], end=", ")
print("n")
$endgroup$
$begingroup$
Thanks Jan. I used this approach as well. But your code looks cleaner :)
$endgroup$
– RebornCodeLover
yesterday
add a comment |
$begingroup$
The code can be made more understandable by:
- introducing row and column indices
- replace the while loop with a for loop
- calculate the index for
vlist
from the values of the row/col indices
This reduces the number of help variables needed and could result in something like this:
vlist = ["Value" + str(i+1) for i in range(100)]
cols = 4
rows = 10
for row_idx in range(rows):
for col_idx in range(cols):
idx = row_idx + rows * col_idx
print(vlist[idx], end=", ")
print("n")
$endgroup$
$begingroup$
Thanks Jan. I used this approach as well. But your code looks cleaner :)
$endgroup$
– RebornCodeLover
yesterday
add a comment |
$begingroup$
The code can be made more understandable by:
- introducing row and column indices
- replace the while loop with a for loop
- calculate the index for
vlist
from the values of the row/col indices
This reduces the number of help variables needed and could result in something like this:
vlist = ["Value" + str(i+1) for i in range(100)]
cols = 4
rows = 10
for row_idx in range(rows):
for col_idx in range(cols):
idx = row_idx + rows * col_idx
print(vlist[idx], end=", ")
print("n")
$endgroup$
The code can be made more understandable by:
- introducing row and column indices
- replace the while loop with a for loop
- calculate the index for
vlist
from the values of the row/col indices
This reduces the number of help variables needed and could result in something like this:
vlist = ["Value" + str(i+1) for i in range(100)]
cols = 4
rows = 10
for row_idx in range(rows):
for col_idx in range(cols):
idx = row_idx + rows * col_idx
print(vlist[idx], end=", ")
print("n")
answered yesterday
Jan KuikenJan Kuiken
87838
87838
$begingroup$
Thanks Jan. I used this approach as well. But your code looks cleaner :)
$endgroup$
– RebornCodeLover
yesterday
add a comment |
$begingroup$
Thanks Jan. I used this approach as well. But your code looks cleaner :)
$endgroup$
– RebornCodeLover
yesterday
$begingroup$
Thanks Jan. I used this approach as well. But your code looks cleaner :)
$endgroup$
– RebornCodeLover
yesterday
$begingroup$
Thanks Jan. I used this approach as well. But your code looks cleaner :)
$endgroup$
– RebornCodeLover
yesterday
add a comment |
$begingroup$
It can be solved by using the slice object.
From Python documentation:
slice - An object usually containing a portion of a sequence. A slice is created using the subscript notation, with colons between numbers
when several are given, such as in variable_name[1:3:5]. The bracket
(subscript) notation uses slice objects internally.
cols = 4
step = 10
vlist = ["Value" + str(i+1) for i in range(100)]
end = step * cols
for start in range(step):
print(', '.join(vlist[start:end:step]))
Output
Value1, Value11, Value21, Value31
Value2, Value12, Value22, Value32
Value3, Value13, Value23, Value33
Value4, Value14, Value24, Value34
Value5, Value15, Value25, Value35
Value6, Value16, Value26, Value36
Value7, Value17, Value27, Value37
Value8, Value18, Value28, Value38
Value9, Value19, Value29, Value39
Value10, Value20, Value30, Value40
New contributor
$endgroup$
$begingroup$
Thank you @MinMax. 200_success also gave the same answer earlier.
$endgroup$
– RebornCodeLover
11 hours ago
$begingroup$
@RebornCodeLover It is different. @200_success uses theislice
fromitertools
. I use built-in slice. But yes, they are similar in other ways.
$endgroup$
– MiniMax
11 hours ago
$begingroup$
True. Yes I like it. Thanks
$endgroup$
– RebornCodeLover
10 hours ago
add a comment |
$begingroup$
It can be solved by using the slice object.
From Python documentation:
slice - An object usually containing a portion of a sequence. A slice is created using the subscript notation, with colons between numbers
when several are given, such as in variable_name[1:3:5]. The bracket
(subscript) notation uses slice objects internally.
cols = 4
step = 10
vlist = ["Value" + str(i+1) for i in range(100)]
end = step * cols
for start in range(step):
print(', '.join(vlist[start:end:step]))
Output
Value1, Value11, Value21, Value31
Value2, Value12, Value22, Value32
Value3, Value13, Value23, Value33
Value4, Value14, Value24, Value34
Value5, Value15, Value25, Value35
Value6, Value16, Value26, Value36
Value7, Value17, Value27, Value37
Value8, Value18, Value28, Value38
Value9, Value19, Value29, Value39
Value10, Value20, Value30, Value40
New contributor
$endgroup$
$begingroup$
Thank you @MinMax. 200_success also gave the same answer earlier.
$endgroup$
– RebornCodeLover
11 hours ago
$begingroup$
@RebornCodeLover It is different. @200_success uses theislice
fromitertools
. I use built-in slice. But yes, they are similar in other ways.
$endgroup$
– MiniMax
11 hours ago
$begingroup$
True. Yes I like it. Thanks
$endgroup$
– RebornCodeLover
10 hours ago
add a comment |
$begingroup$
It can be solved by using the slice object.
From Python documentation:
slice - An object usually containing a portion of a sequence. A slice is created using the subscript notation, with colons between numbers
when several are given, such as in variable_name[1:3:5]. The bracket
(subscript) notation uses slice objects internally.
cols = 4
step = 10
vlist = ["Value" + str(i+1) for i in range(100)]
end = step * cols
for start in range(step):
print(', '.join(vlist[start:end:step]))
Output
Value1, Value11, Value21, Value31
Value2, Value12, Value22, Value32
Value3, Value13, Value23, Value33
Value4, Value14, Value24, Value34
Value5, Value15, Value25, Value35
Value6, Value16, Value26, Value36
Value7, Value17, Value27, Value37
Value8, Value18, Value28, Value38
Value9, Value19, Value29, Value39
Value10, Value20, Value30, Value40
New contributor
$endgroup$
It can be solved by using the slice object.
From Python documentation:
slice - An object usually containing a portion of a sequence. A slice is created using the subscript notation, with colons between numbers
when several are given, such as in variable_name[1:3:5]. The bracket
(subscript) notation uses slice objects internally.
cols = 4
step = 10
vlist = ["Value" + str(i+1) for i in range(100)]
end = step * cols
for start in range(step):
print(', '.join(vlist[start:end:step]))
Output
Value1, Value11, Value21, Value31
Value2, Value12, Value22, Value32
Value3, Value13, Value23, Value33
Value4, Value14, Value24, Value34
Value5, Value15, Value25, Value35
Value6, Value16, Value26, Value36
Value7, Value17, Value27, Value37
Value8, Value18, Value28, Value38
Value9, Value19, Value29, Value39
Value10, Value20, Value30, Value40
New contributor
New contributor
answered 11 hours ago
MiniMaxMiniMax
1363
1363
New contributor
New contributor
$begingroup$
Thank you @MinMax. 200_success also gave the same answer earlier.
$endgroup$
– RebornCodeLover
11 hours ago
$begingroup$
@RebornCodeLover It is different. @200_success uses theislice
fromitertools
. I use built-in slice. But yes, they are similar in other ways.
$endgroup$
– MiniMax
11 hours ago
$begingroup$
True. Yes I like it. Thanks
$endgroup$
– RebornCodeLover
10 hours ago
add a comment |
$begingroup$
Thank you @MinMax. 200_success also gave the same answer earlier.
$endgroup$
– RebornCodeLover
11 hours ago
$begingroup$
@RebornCodeLover It is different. @200_success uses theislice
fromitertools
. I use built-in slice. But yes, they are similar in other ways.
$endgroup$
– MiniMax
11 hours ago
$begingroup$
True. Yes I like it. Thanks
$endgroup$
– RebornCodeLover
10 hours ago
$begingroup$
Thank you @MinMax. 200_success also gave the same answer earlier.
$endgroup$
– RebornCodeLover
11 hours ago
$begingroup$
Thank you @MinMax. 200_success also gave the same answer earlier.
$endgroup$
– RebornCodeLover
11 hours ago
$begingroup$
@RebornCodeLover It is different. @200_success uses the
islice
from itertools
. I use built-in slice. But yes, they are similar in other ways.$endgroup$
– MiniMax
11 hours ago
$begingroup$
@RebornCodeLover It is different. @200_success uses the
islice
from itertools
. I use built-in slice. But yes, they are similar in other ways.$endgroup$
– MiniMax
11 hours ago
$begingroup$
True. Yes I like it. Thanks
$endgroup$
– RebornCodeLover
10 hours ago
$begingroup$
True. Yes I like it. Thanks
$endgroup$
– RebornCodeLover
10 hours ago
add a comment |
RebornCodeLover is a new contributor. Be nice, and check out our Code of Conduct.
RebornCodeLover is a new contributor. Be nice, and check out our Code of Conduct.
RebornCodeLover is a new contributor. Be nice, and check out our Code of Conduct.
RebornCodeLover is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f215556%2fdisplaying-elements-of-a-list-in-columns%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
$begingroup$
Welcome to Code Review! Is
Each [value] should be "step" away from the previous value
an "external" requirement? ((Block-) Quote the specification of the result to achieve.) Another interpretation is In a monospace font, each value shall be output 10 places to the right of the preceding one, the advantage being all values getting displayed.$endgroup$
– greybeard
yesterday