我有一个任意偶数项目的列表.
输入数据:
Red
Orange
Yellow
Green
Blue
Violet
Run Code Online (Sandbox Code Playgroud)
输出数据:
Red -> Violet
Violet -> Orange
Orange -> Blue
Blue -> Yellow
Yellow -> Green
Green -> Red
Run Code Online (Sandbox Code Playgroud)
我的想法是,最高的项目与最低的项目匹配,我想有点从堆栈的两端弹出一些东西.一旦堆栈用完,最后剩下的匹配就是我们开始使用的任何东西.
我从这开始:
awk '{a[NR]=$0} END {for (i=1;i<=NR;i++) {printf("%s -> %s\n",a[i],a[NR-i+1])}}'
Run Code Online (Sandbox Code Playgroud)
它匹配从顶部到底部,但不"弹出".
这有可能在awk?
注意:我已经标记了这个"python",因为虽然我没有任何线索如何在python中执行此操作,但我非常想知道,如果它比awk答案更优雅,它将接受python答案.:-)
这是一个Python解决方案:
data = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Violet']
first = data[0]
while data:
a, b = data[0], data[-1]
data = data[1:-1]
print '{} -> {}'.format(a, b)
print '{} -> {}'.format(b, data[0] if data else first)
Run Code Online (Sandbox Code Playgroud)
这里的起点是数据列表,如果需要从文件中读取输入,可以使用以下命令填充data
:
data = [line.strip() for line in open(filename)]
Run Code Online (Sandbox Code Playgroud)
如果要从stdin读取数据,可以使用以下命令:
import sys
data = [line.strip() for line in sys.stdin]
Run Code Online (Sandbox Code Playgroud)
要从列表的开头和结尾有效删除,请使用collections.deque.如果您从stdin读取,这将是这样的:
import sys
import collections
data = collections.deque(line.strip() for line in sys.stdin)
first = data[0]
while data:
a, b = data.popleft(), data.pop()
print '{} -> {}'.format(a, b)
print '{} -> {}'.format(b, data[0] if data else first)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
107 次 |
最近记录: |