在python

时间:2016-04-14 00:36:35

标签: python list for-loop

我有一个可能未知长度的列表,如下所示:

list = [[1,2], [3,4,5], [6]]

我有一个for循环打印出这些项目,但我也希望能够在它们之间添加一个额外的新行。

1
2

3
4
5

6

我不希望在最后一项之后或第一项之前增加一条新线。我有一个for循环,打印出行中项目之间的空格。但是,存在一个或多个索引为空的情况。在这种情况下,我不想添加额外的新行。我设法弄清楚第一个或最后一个索引是否为空以及如何处理,但不是中间索引。

例如,上述结果也可以通过以下方式获得:

list = [[1, 2], [], [3, 4, 5], [6]]

我不确定确定这一点的最佳方法是什么。

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