Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从文件的列表/行中每隔一行收集一个字符串_Python_List_Python 3.x - Fatal编程技术网

Python 从文件的列表/行中每隔一行收集一个字符串

Python 从文件的列表/行中每隔一行收集一个字符串,python,list,python-3.x,Python,List,Python 3.x,我已经编写了大约两周的脚本,刚刚学会了如何从文件中读取 我想做的是从我的原始列表中获取其他条目,并将其存储在新列表中。这是最好的方法吗 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:

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

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

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——我很高兴这似乎奏效了。

您可以使用:

输入文件

Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
>>> 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']
Python:

Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
>>> 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']

进一步阅读:。

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

切片表示法 Python有一种迭代数组中每n个元素的方法,称为。可以用以下行替换整个循环

Username.extend(File[0::2])
这基本上意味着获取从索引
0
开始的每个
2
nd元素,并将其添加到
Username
数组中

range()
函数 您还可以使用不同版本的
range()
函数,该函数允许您指定开始、结束和步骤等

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

range()
函数是有文档记录的。

好的,谢谢,如果我只使用range(0,len(File),2),它也会工作吗?还是不工作?虽然它会产生更多的代码,但会工作。选择最适合您阅读的内容。:)我更新了我的答案,提到使用了
range()
函数。与其他方法相比,这似乎有点复杂,但是我将查找它以了解一些知识:D@KieranLavelle此方法的一个优点是,它不会将整个文件存储在临时列表中(这对于大型文件很有用),因为在文件上进行迭代是非常困难的,在读取文件时,您不感兴趣的行会被丢弃。