【问题标题】:Gathering every other string from list / line from file从文件的列表/行中收集所有其他字符串
【发布时间】:2013-08-09 21:09:19
【问题描述】:

我已经编写了大约两周的脚本,并且刚刚学会了从文件中读取。

我想要做的是从我的原始列表中获取所有其他条目并将其存储在一个新列表中。这是最好的方法吗?

with open("test.txt",mode="r") as myfile:
File = myfile.read().splitlines()

Username = []

for i in range (len(File)):
    if File.index(File[i])%2 == 0 or File.index(File[i]) == 0:
        Username.append(File[i])
print(Username)

请记住,到目前为止,我只学习了大约十个小时的 Python - 我很高兴这似乎有效。

【问题讨论】:

    标签: python list python-3.x


    【解决方案1】:

    至少有几种方法可以用更少的代码完成同样的事情。

    切片表示法

    Python 有一种方法可以遍历数组的每个第 n 个元素,称为 slice notation。您可以用以下行替换整个循环

    Username.extend(File[0::2])
    

    这基本上意味着抓取从索引0 开始的每个2nd 元素并将其添加到Username 数组中。

    range() 函数

    您还可以使用不同版本的 range() 函数,它允许您指定开始、结束和步骤,列出这些。

    for i in range(0, len(File), 2):
        Username.append(File[i])
    

    range() 函数记录在 here

    【讨论】:

    • 好的,谢谢,如果我只使用 range(0,len(File),2) 是否也有效,还是无效?
    • 这会起作用,尽管它会产生更多代码。选择最适合您阅读的内容。 :) 我使用range() 函数更新了我的答案。
    【解决方案2】:

    你可以使用list comprehension:

    input_file:

    Line 1
    Line 2
    Line 3
    Line 4
    Line 5
    Line 6
    Line 7
    Line 8
    Line 9
    Line 10
    

    Python:

    >>> with open("input_file") as f:
    ...     alternates = [line for i, line in enumerate(f) if not i % 2]
    ... 
    >>> alternates
    ['Line 1\n', 'Line 3\n', 'Line 5\n', 'Line 7\n', 'Line 9\n']
    

    延伸阅读:the enumerate() built-in function.

    【讨论】:

    • 与其他方法相比,这似乎有点复杂,但是我会查找它以进行一些学习:D
    • @KieranLavelle 这种方法的一个优点是它不会将整个文件存储在临时列表中(这对大文件很有用),因为迭代文件是lazy,并且在读取文件时,您不感兴趣的行会被丢弃。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2014-09-03
    • 1970-01-01
    • 2017-11-27
    • 2020-10-28
    • 1970-01-01
    相关资源
    最近更新 更多