【问题标题】:Send each line of a multiline string to a list within a for loop [duplicate]将多行字符串的每一行发送到for循环中的列表[重复]
【发布时间】:2020-02-02 00:07:04
【问题描述】:

我有一个多行字符串,如下所示:

something1
something2
something3

我想将此字符串的每一行发送到一个列表,以便result[0] = something1 等等。

我试过这样做:

for line in tableOut:
        results.append(line.strip().split('\n'))

但是,这会使字符串的每个字符都发送到列表中的唯一索引。

例如:

[['s'], ['o'], ['m'], ['e'], ['t'], ['h'], ['i'], ['n'], ['g'], ['1']]

为什么这不起作用,如何将多行字符串的每一行发送到 for 循环内列表中的唯一索引?

【问题讨论】:

  • 查看字符串函数 split() 要获得行列表,然后列表 y 上的 for x in y 操作会将 y 中的每个条目分配给 x - 但要小心确保生成的行没有 \r 或 \n 等。所以也许在 split 的结果上使用strip()
  • [x_ for x_ in [x.strip() for x in data.splitlines()] if x_]。您的代码的固定版本可能是for line in tableOut.split('\n'): results.append(line.strip())
  • tableOut.split()。 (遍历字符串会产生字符。)
  • results = tableOut.splitlines()?

标签: python string list


【解决方案1】:

tableOut 是一个字符串:一个字符序列。将循环索引命名为 line 会产生误导,因为字符串上的迭代器会返回单个字符。这是你的主要问题。

相反,split 将您的字符串放入行列表中——正如@sardok 已经总结的那样。剥离各个线。您可以使用列表推导而不是显式循环来做到这一点。

results = [strip(line) for line in tableOut.split('\n')]

【讨论】:

    【解决方案2】:

    不清楚您所说的“多行”字符串是什么意思,但可以说它是这样的:

    tableOut = 'something1\n' \
               'something2\n' \
               'something3'
    

    那么你可以这样做:

    result = []
    for line in tableOut.split('\n'):
        result.append(line.strip())
    

    不是最 Pythonic 的方式,但它与您尝试做的类似。

    【讨论】:

    • 我在问题中提供了一个多行字符串的示例。
    • 是的,好吧,我本可以这样解释的。
    猜你喜欢
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多