【问题标题】:set function with file- python3使用文件设置函数-python3
【发布时间】:2017-12-21 01:00:55
【问题描述】:

我有一个包含以下内容的文本文件

Credit

Debit

21/12/2017

09:10:00

编写python代码将文本转换为集合并丢弃\n。

with open('text_file_name', 'r') as file1:
    same = set(file1)
    print (same)
    print (same.discard('\n'))

对于第一个打印语句打印(相同)。我得到正确的结果:

{'Credit\n','Debit\n','21/12/2017\n','09:10:00\n'}

但是对于第二个打印语句 print (same.discard('\n')) 。我得到的结果是 None.

谁能帮我弄清楚为什么我没有得到。我正在使用same.discard('\n') 丢弃集合中的\n

注意: 我正在尝试了解关于 set 的丢弃功能。

【问题讨论】:

标签: python-3.x


【解决方案1】:

discard 方法只会从集合中删除一个元素,因为您的集合不只包含 \n 它不能丢弃它。您正在寻找的是一张从每个元素中剥离 \n 的地图,如下所示:

set(map(lambda x: x.rstrip('\n'), same))

这将返回 {'Credit', 'Debit', '09:10:00', '21/12/2017'} 作为集合。此示例通过使用 map 内置函数将其第一个参数应用于集合中的每个元素。我们map 用法中的第一个参数是lambda x: x.rstrip('\n'),它只是删除每个字符串右侧出现的\n

【讨论】:

  • 我认为这将是最节省内存和时间的答案,因为内置的 map 方法是用 C 实现的。
【解决方案2】:

discard 仅在 set 中出现给定元素时才将其删除。 此外,该函数不会返回任何值,因为它会更改运行它的 set

with open('text_file_name', 'r') as file1:
    same = set(file1)
    print (same)
    same = {elem[:len(elem) - 1] for elem in same if elem.endswith('\n')}
    print (same)

【讨论】:

    【解决方案3】:

    set中有4个元素,都不是换行符。

    在这种情况下使用list 会更常见,因为这样可以保持顺序,而不能保证集合保持顺序,而且它会丢弃重复的行。也许你有你的理由。

    您似乎在寻找rstrip('\n')。考虑以这种方式处理文件:

        s = {}
        with open('text_file_name') as file1:
            for line in file1:
                s.add(line.rstrip('\n'))
        s.discard('Credit')
        print(s) # This displays 3 elements, without trailing newlines.
    

    【讨论】:

    • 即使有一个换行符作为集合的一个元素,你仍然会得到None 作为.discard() 方法的结果。它的工作是从现有集合中删除一个元素,它不需要返回任何内容,因为您已经拥有该集合。
    • 在我看来,OP 对 discard 的集合能达到多远感到困惑,所以我试图回答真正的问题(“我如何去除换行符?”)而不是那个字面上出现在帖子中。我试图提供帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-12-05
    • 2021-12-21
    • 2018-04-13
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 2019-09-04
    相关资源
    最近更新 更多