如何使用括号在换行符中打印列表元素?

时间:2019-01-22 07:46:42

标签: python

假设有一个列表demo_list

[u'demo', u'trial']

使用for循环以'\ n'打印每个元素:

for i in demo_list:
    print(i)

它按预期工作:

demo
trial

但是,我想使用方括号来表示此循环:

print([ i for i in demo_list]) 

但是它直接在一行中打印整个列表:

[u'demo', u'trial']

对于表达式[print(i) for i in demo_list],它表示SyntaxError: invalid syntax

我的问题是:

  1. 如何使用括号将每个元素放在新行中?
  2. 表达式[print(i) for i in demo_list]有什么问题?

感谢您的帮助。

5 个答案:

答案 0 :(得分:1)

使用列表理解(即 bracket 表达式)生成列表后,如何在join中使用“ \ n”-换行符和In [29]: demo_list = [u'demo', u'trial'] In [30]: print("\n".join([ i for i in demo_list])) demo trial

In [31]: print("\n".join(demo_list)) 
demo
trial

通常,如果您已经有了列表,则无需理解列表。使用换行符char进行简单的联接操作会很好。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains

url = 'http://abacus.realendpoints.com/ConsoleTemplate.aspx?act=qlrd&req=nav&mop=abacus!main&pk=ed5a81ad-9367-41c8-aa6b-18a08199ddcf&ab-eff=1000&ab-tox=0.1&ab-nov=1&ab-rare=1&ab-pop=1&ab-dev=1&ab-prog=1.0&ab-need=1&ab-time=1543102810'
d = webdriver.Chrome()
actions = ActionChains(d)
d.get(url)
paths = WebDriverWait(d,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".highcharts-grid highcharts-yaxis-grid path")))
results = []
for path in paths:
    actions.move_to_element(path).perform()
    actions.click_and_hold(path).perform()
    items = d.find_elements_by_css_selector('#priceChart path + text tspan')
    result = [item.text for item in items]
    if result:
        results.append(result)
d.close()
print(results)

答案 1 :(得分:1)

这称为列表理解。您不能在列表理解中使用声明。很明显,如果您以这种方式看到:

[assert x for x in lst]

# same as
[print x for x in lst]

Python 2.7中的print,但不是函数。因此它是SyntaxError。但这有效:

l = [1,2,3]

def p(x):
    print(x)

map(p, l)
# or
[p(x) for x in l]

参考:List Comprehension: why is this a syntax error?

答案 2 :(得分:1)

您也可以这样做:

In [591]: from __future__ import print_function
In [592]: print(*demo_list,sep='\n')
demo
trial

答案 3 :(得分:1)

您可以:

print(*[i for i in demo_list],sep='\n')

print(*demo_list, sep='\n')

如果您使用的是Python2.7,则应该使用from __future__ import print_function

答案 4 :(得分:1)

首先,根据错误消息,您未使用python 3,而是2.7x。 因为您的代码可在python 3中使用。

在python 2.7中,print不是函数,而是格式为print [,] *的语句。 (方括号表示可选参数)。

列表理解也是一种创建列表的方法。您可能会在末尾看到[None,None],因此最好将其分配给变量。

将列表理解修改为:

def print_stmt(x):
    print x

a = [print_stmt(x) for x in ["demo", "trial"]]

这将打印为:

demo

trial