我是Python的新手..
我有一个列表(names.txt),这是四个名字:
我想从文件中输出列表,然后将名称的顺序更改为一个空格,并将该输出保存在原始“names.txt”文件中。
即
Run1将是:Colin Gary Gibby Ross
Run2将是:Gary Gibby Ross Colin
Run3将是:Gibby Ross Colin Gary
....等等。
我到目前为止的代码能够将文件和输出作为列表,但我不知道如何将订单移动1位并再次保存:
#!/usr/bin/python
# Open a file
with open ('names.txt', 'r') as f:
list1 = f.read().splitlines()
for item1 in list1[0:4]:
print (item1)
f.close()
所有帮助表示赞赏。感谢。
答案 0 :(得分:2)
This回答详细说明如何使用collections.deque
移动列表,他们声明这些列表已针对&#34进行了优化;推送和拉动两端"为此,我已将下面的示例代码包含在内。
from collections import deque
items = deque([1, 2])
items.append(3) # deque == [1, 2, 3]
items.rotate(1) # The deque is now: [3, 1, 2]
items.rotate(-1) # Returns deque to original state: [1, 2, 3]
item = items.popleft() # deque == [2, 3]
答案 1 :(得分:1)
只需在循环中从索引1
开始打印所有内容。最后打印索引0
for i in range(1:len(list1)):
print(list1[i])
print(list1[0])
或者如果您需要将它放在新列表中:
list1 = list1[1:] + list1[:1]
答案 2 :(得分:0)
您可以使用切片表示法旋转这样的序列。
var input = "Value.1.name = S1";
var result = Regex.Matches( input, @"\.(\d)\..*S\1" );
foreach( var match in result.Cast<Match>() )
Console.WriteLine( match.Groups[ 1 ].Value );
此def rotate(sequence, shift=1):
return sequence[-shift:] + sequence[:-shift]
>>> rotate([1, 2, 3, 4])
[4, 1, 2, 3]
>>> rotate('hello world', 5)
'o worldhell'
>>> rotate(['Colin', 'Gary', 'Gibby', 'Ross'], -1)
['Gary', 'Gibby', 'Ross', 'Colin']
函数不会改变原始序列。对于非常长的序列和更快的性能,您可以从标准库中查看rotate
。 collections.deque
序列类型可以在内存和性能有效的方式中就地旋转。
答案 3 :(得分:0)
这将读取您现有的names.txt
文件并显示其内容。然后它将顺序更改为1并将结果列表写回同一文件:
with open('names.txt', 'r') as f:
list1 = f.read().splitlines()
print('\n'.join(list1))
list1 = list1[1:] + list1[:1]
with open('names.txt', 'w') as f:
f.write('\n'.join(list1))
RUN1
Colin
Gary
Gibby
Ross
RUN2
Gary
Gibby
Ross
Colin