Python 在循环中使用切片

Python 在循环中使用切片,python,indexing,while-loop,slice,file-writing,Python,Indexing,While Loop,Slice,File Writing,我正在从列表中写入一个文件。该列表包含波长和计数。如下图所示: list = ['300','5','400','7','500','4'] '300' '5' '5' '400' '400' '7' '7' '500' '500' '4' 我想做的是将这些元素写入一个文件,这样第一列将是wavelenght条目,第二列将是count条目 我的解决方案如下: file = open("prøve_fil.TXT","w") index = 0 while

我正在从列表中写入一个文件。该列表包含波长和计数。如下图所示:

list = ['300','5','400','7','500','4']
'300' '5' '5' '400' '400' '7' '7' '500' '500' '4' 我想做的是将这些元素写入一个文件,这样第一列将是wavelenght条目,第二列将是count条目

我的解决方案如下:

file = open("prøve_fil.TXT","w")

index = 0
while index <= len(lines):
    file.write(lines[index]+'\t'+lines[index+1]+'\n')
    index += 1
file=open(“prøve_fil.TXT”,“w”)
索引=0

索引使用
zip
和切片:

>>> for x,y in zip(data[::2], data[1::2]):
...     print(f"{x}\t{y}")
...
300 5
400 7
500 4
>>>
或者你可以使用这种厚颜无耻的结构*:

>>> for x,y in zip(*[iter(data)]*2):
...     print(f"{x}\t{y}")
...
300 5
400 7
500 4
以上内容应该让您体验一下python提供的大量迭代构造。但是,我建议坚持基本的循环结构,例如:

>>> for i in range(0, len(data) - 1, 2):
...     print(data[i],data[i+1])
...
300 5
400 7
500 4
注意,要学会选择for循环而不是while循环。一旦掌握了窍门,它们就不那么容易出错。使用
范围
可以做很多事情。但是,以下是等效的while循环:

i = 0
while i < len(data) - 1:
    print(data[i], data[i+1])
    i += 2
但是,它只会让你在最后一次聚会之前放弃:

>>> list(iter_by_n(range(10), 3))
[(0, 1, 2), (3, 4, 5), (6, 7, 8)]
>>> list(iter_by_n(range(11), 3))
[(0, 1, 2), (3, 4, 5), (6, 7, 8)]
>>> list(iter_by_n(range(12), 3))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11)]
这通常是您想要的行为,但是您也可以使用
itertools.zip\u longest
以您想要的任何默认值填充分区:

>>> from itertools import zip_longest
>>> def iter_by_n(iterable, n, fillvalue=None):
...     return zip_longest(*[iter(iterable)]*n, fillvalue=fillvalue)
...
>>> list(iter_by_n(range(10), 3))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, None, None)]
>>> list(iter_by_n(range(10), 3, fillvalue='FOO'))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 'FOO', 'FOO')]
>>> list(iter_by_n(range(11), 3, fillvalue='FOO'))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 'FOO')]
>>> list(iter_by_n(range(12), 3, fillvalue='FOO'))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11)]
>>>

使用
zip
进行切片:

>>> for x,y in zip(data[::2], data[1::2]):
...     print(f"{x}\t{y}")
...
300 5
400 7
500 4
>>>
或者你可以使用这种厚颜无耻的结构*:

>>> for x,y in zip(*[iter(data)]*2):
...     print(f"{x}\t{y}")
...
300 5
400 7
500 4
以上内容应该让您体验一下python提供的大量迭代构造。但是,我建议坚持基本的循环结构,例如:

>>> for i in range(0, len(data) - 1, 2):
...     print(data[i],data[i+1])
...
300 5
400 7
500 4
注意,要学会选择for循环而不是while循环。一旦掌握了窍门,它们就不那么容易出错。使用
范围
可以做很多事情。但是,以下是等效的while循环:

i = 0
while i < len(data) - 1:
    print(data[i], data[i+1])
    i += 2
但是,它只会让你在最后一次聚会之前放弃:

>>> list(iter_by_n(range(10), 3))
[(0, 1, 2), (3, 4, 5), (6, 7, 8)]
>>> list(iter_by_n(range(11), 3))
[(0, 1, 2), (3, 4, 5), (6, 7, 8)]
>>> list(iter_by_n(range(12), 3))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11)]
这通常是您想要的行为,但是您也可以使用
itertools.zip\u longest
以您想要的任何默认值填充分区:

>>> from itertools import zip_longest
>>> def iter_by_n(iterable, n, fillvalue=None):
...     return zip_longest(*[iter(iterable)]*n, fillvalue=fillvalue)
...
>>> list(iter_by_n(range(10), 3))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, None, None)]
>>> list(iter_by_n(range(10), 3, fillvalue='FOO'))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 'FOO', 'FOO')]
>>> list(iter_by_n(range(11), 3, fillvalue='FOO'))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 'FOO')]
>>> list(iter_by_n(range(12), 3, fillvalue='FOO'))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11)]
>>>

尝试以下方法,作为代码的更新:

lines = ['300','5','400','7','500','4']
index = 0
while index <= (len(lines) -2):
    print(lines[index] + "\t" + lines[index+1] + "\n")
    index += 2

尝试以下方法,作为代码的更新:

lines = ['300','5','400','7','500','4']
index = 0
while index <= (len(lines) -2):
    print(lines[index] + "\t" + lines[index+1] + "\n")
    index += 2

2
来增加
索引,而不是
1
。用2来增加并没有多大帮助。这会将每隔一行作为波长或计数,因此它会变成:“300”“400”“5”“7”
索引+=2
应该可以很好地修复它。使用
2
而不是
1
来增加
索引。使用两个来增加并没有多大帮助。这会将每隔一行作为波长或计数,因此它会变成:“300”“400”“5”“7”
index+=2
应该可以很好地修复它。虽然解决方案是正确的python解决方案,但我想说,在这种情况下,它只会混淆OP,或者让他在不理解的情况下剪切粘贴代码。OP正在努力进行基本的索引迭代。是的!非常感谢你@伊曼诺伦戈,我想我已经开始切了。我一直在努力将它实现成循环。虽然解决方案是正确的Pythonic解决方案,但我想说的是,在这种情况下,它只会混淆OP,或者让他在不理解的情况下剪切粘贴代码。OP正在努力进行基本的索引迭代。是的!非常感谢你@伊曼诺伦戈,我想我已经开始切了。我所挣扎的是将它实现成循环。