繁体   English   中英

在新行上将列表中的列表打印为字符串

[英]Printing a list within a list as a string on new lines

我真的在为这个问题苦苦挣扎,似乎无法在任何地方找到答案。 我有一个包含车站名称和位置的文本文件,任务是按顺序打印出所有车站的名称,位置也相同。
在我的文本文件中,站名总是由两个词组成,位置是三个词。

text_file = "London Euston 12 London 56, Aylesbury Vale 87 Parkway 99, James Cook 76 University 87, Virginia Water 42 Surrey 78"

期望的结果是:

Stations:
London Euston
Aylesbury Vale
James Cook
Virginia Water

Locations:
12 London 56
87 Parkway 99
76 University 87
42 Surrey 78

我当前的代码:

replaced = text_file.replace(","," ")
replaced_split = replaced.split()

i = 0
b = 2
stations = []
locations = []

while b < len(replaced_split):
   locations.append(replaced_split[b:b+3])
   b += 5

while i < len(replaced_split):
   stations.append(replaced_split[i:i+2])
   i += 5

for x in range(len(stations)):
   print(stations[x])

for y in range(len(locations)):
   print(dates[y])
The outcome I'm receiving is printing lists out:
['London', 'Euston']
['Aylesbury', 'Vale']
['James', 'Cook']
['Virginia', 'Water']
['12', 'London', '56']
['87', 'Parkway', '99']
['76', 'University', '87']
['42', 'Surrey', '78']

这是一种使用 for 循环而不是 while 循环的简单直接的方法。
代码的作用:它将您的字符串拆分为子字符串,其中每个 substring 由逗号和空格分隔。 之后,它再次按空格拆分这些子字符串,然后连接每个 substring 的前两个元素以创建站并将其附加到站列表,最后 substring 的 rest 留下前两个元素作为位置并将其附加到位置列表。 现在你循环列表来打印它们的元素

stations = []
locations = []

for char in text_file.split(", "):
    parts = char.split(" ")
    stations.append(" ".join(parts[:2]))
    locations.append(" ".join(parts[2:]))


print("Stations:")
for station in stations:
    print(station)

print("\nLocations:") 
for location in locations:
    print(location)


Stations:
London Euston
Aylesbury Vale
James Cook
Virginia Water

Locations:
12 London 56
87 Parkway 99
76 University 87
42 Surrey 78

不要简单地打印列表,而是先尝试加入列表,如下所示:

print(' '.join(stations[x]))

您甚至可以从此缩短整个循环:

for x in range(len(stations)):
   print(stations[x])

对此:

print('\n'.join(' '.join(station) for station in stations))

在这里,正则表达式可以派上用场,而不是手动处理字符串。 首先将text_file每个输入拆分为一行,然后使用两个捕获组来获取每个输入的站点和位置。 我们将站点和位置存储在两个 arrays 中,并在最后打印出来。

import re

text_file = "London Euston 12 London 56, Aylesbury Vale 87 Parkway 99, James Cook 76 University 87, Virginia Water 42 Surrey 78"

prog = re.compile(r'(\w+\s\w+)\s(\d+\s\w+\s\d+)')
lines = text_file.split(', ')
stations = []
locations = []

for line in lines:
    result = prog.match(line)
    stations.append(result.group(1))
    locations.append(result.group(2))

print("Stations:")
for s in stations:
    print(s)
print("\nLocations")
for l in locations:
    print(l)

你正在做的工作和安排你想要的数据。 您只需要通过join列表正确打印它。 在您现有的代码中,如果您更改为:

print(' '.join(stations[x]))

和:

print(' '.join(dates[y]))

您将获得所需的 output。


但是如果字符串的结构总是像你说的那样,你可以稍微简化一下逻辑:

text_file = "London Euston 12 London 56, Aylesbury Vale 87 Parkway 99, James Cook 76 University 87, Virginia Water 42 Surrey 78"
places = text_file.split(', ')

stations, locations = [], []
for place in places:
    parts = place.split()
    stations.append(' '.join(parts[:2]))
    locations.append(' '.join(parts[2:]))

print("Stations:")
for station in stations:
    print(station)

print("Locations:")
for location in locations:
    print(location)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM