使用Python更改列表的顺序

时间:2016-08-31 11:27:58

标签: python

我是Python的新手..

我有一个列表(names.txt),这是四个名字:

  • 科林
  • Gary
  • 吉比
  • 罗斯

我想从文件中输出列表,然后将名称的顺序更改为一个空格,并将该输出保存在原始“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()

所有帮助表示赞赏。感谢。

4 个答案:

答案 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'] 函数不会改变原始序列。对于非常长的序列和更快的性能,您可以从标准库中查看rotatecollections.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