Python stdin,readlines。改变输出顺序

0 投票
2 回答
514 浏览
提问于 2025-04-17 15:12

我在用Mac电脑工作,有个关于Python循环的问题。

我有一个叫做rectangle.txt的文本文件,里面的内容是这样的:

abcde
fghij
klmno

我需要通过标准输入来读取这些内容。但我希望我的程序能做到:

afk
bgl
chm
din
ejo

到目前为止,我写了一个程序,可以读取所有的行,分割它们并打印出来。

代码已编辑
So when I changed my code to this:

for line in sys.stdin.readline():
    ls1 = line
    print ls1

我得到了这个列表:

a
b
c
d
e

现在我只需要遍历那些其他的内容,但我不知道该怎么做。

我是在命令行中运行这个函数的:

python rectangle.py < rectangle.txt

我正在努力学习这些内容,所以我希望有人能以我能理解的方式来帮助我,而不是直接给我答案。

另外,除了这个.txt文件的输入,我的程序还会用这些输入进行测试:

123
456
789

还有

A
B
C

所有的测试都和上面的一样。再次感谢你们的帮助。我已经为这个问题努力了好几个小时,但还是没能搞明白。

2 个回答

0

值得信赖的 zip 函数来帮忙了:

>>> lines = ["abc", "def", "ghi"]
>>> result = [''.join(x) for x in zip(*lines)]
>>> result
['adg', 'beh', 'cfi']

解释一下:zip 函数的作用就是把你给它的每个可迭代对象中的元素聚合到一个新的列表里。我们需要把这些可迭代对象单独传给 zip,而不是作为一个列表传入,这就是 *lines 的作用。最后,我们把单个字符数组连接起来,因为我们想要的是一个字符串数组,而不是一个字符数组的数组。

0

我假设每行的输入长度都是一样的。

在这种情况下,可以先把输入的字符串放到一个列表里,然后根据其中一个字符串的长度来循环处理。

比如有这几个字符串:["abcde", "fghij", "kilmn"],你注意到每个字符串的第一个字符有什么规律吗?就是"a" + "f" + "k"。

撰写回答