我有一个可能未知长度的列表,如下所示:
list = [[1,2], [3,4,5], [6]]
我有一个for循环打印出这些项目,但我也希望能够在它们之间添加一个额外的新行。
1
2
3
4
5
6
我不希望在最后一项之后或第一项之前增加一条新线。我有一个for循环,打印出行中项目之间的空格。但是,存在一个或多个索引为空的情况。在这种情况下,我不想添加额外的新行。我设法弄清楚第一个或最后一个索引是否为空以及如何处理,但不是中间索引。
例如,上述结果也可以通过以下方式获得:
list = [[1, 2], [], [3, 4, 5], [6]]
我不确定确定这一点的最佳方法是什么。
答案 0 :(得分:4)
像这样使用enumerate()
:
for i, sub in enumerate(mylist):
if i: print() # If you are using Python 2, remove the parentheses
for x in sub:
print(x)
编辑:我误解了你的问题。由于您的第二个示例列表的语法无效,我认为这意味着只有两个子列表。 PaulRooney的评论清除了这一点,所以你可以这样做:
should_print = False
for sub in mylist:
if should_print: print()
for x in sub:
print(x)
should_print = bool(sub)
答案 1 :(得分:1)
list = [[1,2],[], [3],[5,6,7],[8]]
first = True
for item in list:
if first and item:
first = False
for number in item:
print(number)
else:
if item:
print('')
for number in item:
print(number)
答案 2 :(得分:1)
由于你不希望在它之前或之后有额外的空间听起来像str.join
可能更接近你想要的那么其他答案打印它的块,首先你需要一些生成器为每个块格式化它自己的:
def parse_list(mylist):
for seq in mylist:
if seq: #is not empty
yield "\n".join(map(str,seq))
#with print function
print(*parse_list(stuff), sep="\n\n")
#old print statement (but still forward compatible)
print ("\n\n".join(parse_list(stuff)))
如果你只需要使用一次,你也可以使用生成器表达式:
each_block = ("\n".join(map(str,seq)) for seq in stuff if seq)
print("\n\n".join(each_block))
或者 可以将此缩减为一行,但我不会:
print("\n\n".join("\n".join(map(str,seq)) for seq in stuff if seq))
答案 3 :(得分:0)
这应该可以解决问题:
require "sendgrid-php/sendgrid-php.php";
function sendgrid() {
$recips = array("me@mydomain.ca");
$categories = array("test");
$sendgrid = new SendGrid("API key removed");
$email = new SendGrid\Email();
$email
->setSmtpapiTos($recips)
->setFrom('mailroom@mydomain.ca')
->setSubject('Testing Sendgrid')
->setText('Hello World! Testing...')
->setHtml('<strong>Hello World!</strong>')
->setCategories($categories)
->setAttachment('test.txt')
;
//$sendgrid->send($email);
$res = $sendgrid->send($email);
var_dump($res);
}
sendgrid();
答案 4 :(得分:0)
当你说索引是&#34;空&#34;你的意思是它包含None
吗?
list1 = [[1,2], None, [3]]
或者它包含一个空列表?
list1 = [[1,2], [], [3]]
无论哪种方式,我认为这样可行:
for i,j in enumerate(list1):
if j:
for k in j:
print k
if i+1 < len(list1):
print
编辑:上面假设您的输入始终是列表列表,因为您的问题似乎意味着。
将当前索引与列表长度进行比较,以确定如果列表末尾有一个或多个空元素,我们最后是否会失败,例如:
list3 = [[1,2], [], [3], []]
这将输出:
(start)
1
2
3
(end)
请注意,在3之后有一个换行符,这听起来像你不想要的。如果可能的话,您需要一些额外的逻辑来解释这一点。
答案 5 :(得分:0)
list = [[1, 7, 3], [], [7, 10], None, [2, 3, 4]]
for i, v in enumerate(list):
if v:
if i != 0:
print
for x in v:
print x