【问题标题】:Slicing every item in a list切片列表中的每个项目
【发布时间】:2020-08-19 12:20:18
【问题描述】:

我有一个包含大约 3000 行的 CSV 文件,我已将其作为字符串列表导入 Python 以获得以下内容;

mylist = [('GA0001.abc.123',), ('GA0002.456.cba',), ('GA0003.321.abc',), ('GA0004.xyz.789',)]

有没有办法可以分割所有字符串以删除最后 8 个字符,以便列表如下所示:

newlist = [('GA0001',), ('GA0002',), ('GA0003',), ('GA0004',)]

我尝试过[x[:-8] for x in mylist],但它只会返回[(), (), (), ()]

【问题讨论】:

  • 它不是字符串列表。它是一个元组列表,每个元组都包含一个字符串。注意每个字符串后面的逗号。 [x[0][:-8] for x in mylist]
  • [x[0][:-8] for x in mylist]
  • @roganjosh 或者只是[x[:-8] for x, in mylist]
  • 值得注意的是这里的区别。如果任何元组的 more 元素超过一个(在第一个元素之后默默地忽略任何元素),[x[0][:-8] for x in mylist] 仍然会成功,而 [x[:-8] for x, in mylist] 将引发异常。其中哪个更可取可能会有所不同。

标签: python string list slice


【解决方案1】:

我认为问题在于您的原始列表是 tuplesstringslist。如果您的原始列表是 stringslist,则解决方案 [x[:-8] for x in mylist] 将起作用,但在您的情况下,我们需要:

mylist = [('GA0001.abc.123',), ('GA0002.456.cba',), ('GA0003.321.abc',), ('GA0004.xyz.789',)]

newlist = [x[0][:-8] for x in mylist] 

print(newlist)

输出:

['GA0001', 'GA0002', 'GA0003', 'GA0004']

注意x[0][:-8] 而不是x[:-8]

【讨论】:

  • 我们“不需要”那个。还有其他方法。包括一个较短的。
  • @HeapOverflow 是的,表示长度为 1 的元组的逗号将起作用,并为您节省一个完整的 1 个字符。但我不一定认为它对于不知道定义长度为 1 元组的语法的人来说具有可读性或显而易见性。所以在这种情况下,“需要”是主观的。
【解决方案2】:

您的列表由元组组成,因此您缺少和额外的索引。

如果您想将其保留为元组,请尝试以下操作:

newlist = [(x[0][:-8],) for x in mylist]

如果没有,就去掉内括号:

newlist = [x[0][:-8] for x in mylist]

【讨论】:

    猜你喜欢
    • 2017-09-14
    • 2023-03-22
    • 1970-01-01
    • 2022-11-07
    • 2011-04-26
    • 2016-05-20
    • 2019-07-30
    • 2017-02-26
    • 1970-01-01
    相关资源
    最近更新 更多