Displaying elements of a list, in columns












5












$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









share|improve this question









New contributor




RebornCodeLover is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$












  • $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
















5












$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









share|improve this question









New contributor




RebornCodeLover is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$












  • $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














5












5








5





$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









share|improve this question









New contributor




RebornCodeLover is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$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






share|improve this question









New contributor




RebornCodeLover is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




RebornCodeLover is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited yesterday









200_success

130k17153419




130k17153419






New contributor




RebornCodeLover is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked yesterday









RebornCodeLoverRebornCodeLover

262




262




New contributor




RebornCodeLover is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





RebornCodeLover is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






RebornCodeLover is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












  • $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
















$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










3 Answers
3






active

oldest

votes


















6












$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")





share|improve this answer











$endgroup$













  • $begingroup$
    Thanks for the compact code.
    $endgroup$
    – RebornCodeLover
    yesterday



















1












$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")





share|improve this answer









$endgroup$













  • $begingroup$
    Thanks Jan. I used this approach as well. But your code looks cleaner :)
    $endgroup$
    – RebornCodeLover
    yesterday



















1












$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





share|improve this answer








New contributor




MiniMax is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






$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 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











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.










draft saved

draft discarded


















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









6












$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")





share|improve this answer











$endgroup$













  • $begingroup$
    Thanks for the compact code.
    $endgroup$
    – RebornCodeLover
    yesterday
















6












$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")





share|improve this answer











$endgroup$













  • $begingroup$
    Thanks for the compact code.
    $endgroup$
    – RebornCodeLover
    yesterday














6












6








6





$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")





share|improve this answer











$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")






share|improve this answer














share|improve this answer



share|improve this answer








edited yesterday

























answered yesterday









200_success200_success

130k17153419




130k17153419












  • $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




$begingroup$
Thanks for the compact code.
$endgroup$
– RebornCodeLover
yesterday













1












$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")





share|improve this answer









$endgroup$













  • $begingroup$
    Thanks Jan. I used this approach as well. But your code looks cleaner :)
    $endgroup$
    – RebornCodeLover
    yesterday
















1












$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")





share|improve this answer









$endgroup$













  • $begingroup$
    Thanks Jan. I used this approach as well. But your code looks cleaner :)
    $endgroup$
    – RebornCodeLover
    yesterday














1












1








1





$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")





share|improve this answer









$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")






share|improve this answer












share|improve this answer



share|improve this answer










answered yesterday









Jan KuikenJan Kuiken

87838




87838












  • $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




$begingroup$
Thanks Jan. I used this approach as well. But your code looks cleaner :)
$endgroup$
– RebornCodeLover
yesterday











1












$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





share|improve this answer








New contributor




MiniMax is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






$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 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
















1












$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





share|improve this answer








New contributor




MiniMax is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






$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 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














1












1








1





$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





share|improve this answer








New contributor




MiniMax is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






$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






share|improve this answer








New contributor




MiniMax is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this answer



share|improve this answer






New contributor




MiniMax is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









answered 11 hours ago









MiniMaxMiniMax

1363




1363




New contributor




MiniMax is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





MiniMax is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






MiniMax is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












  • $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$
    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$
    @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$
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










RebornCodeLover is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

"Incorrect syntax near the keyword 'ON'. (on update cascade, on delete cascade,)

Alcedinidae

Origin of the phrase “under your belt”?