使用两个列表创建不同的句子

时间:2017-01-29 02:16:06

标签: python list

所以我有两个清单。假设一个列表包含美国每个州的首都,另一个列表包含州。这两个列表显然是以这样的方式排序的,即list1中的第一个元素(大写)对应于list2(states)的第一个元素。

当只使用一个列表时,好像我只需要更改一个句子中的一个内容,我目前使用以下代码:

list = map(str.strip, list(open('list.txt', 'r')))
questions = ['What is the capital of the state %s' %(element) for element in list]

with open('questions.txt', 'w') as fd:
    fd.write("\n".join(questions))

所以在这个例子中我只使用一个列表(list.txt)和US状态,并且通过运行代码,它会发出一个.txt文件(questions.txt),其中包含许多行:

What is the capital of the state California?

无论list.txt有什么状态。

现在,回到我的问题。如上所述,有时我需要在一个句子中使用两个列表(或者我正在做的任何事情),例如:

(first element of list1) is the capital of the US state (first element from list2)
(second element of list1) is the capital of the US state (second element from list2)
(third element of list1) is the capital of the US state (thirdelement from list2)

依旧......

但我不确定如何修改上面的代码以包含两个列表而不是一个。

提前致谢。

编辑: List1示例:

Sacramento
Austin
Phoenix

List2示例:

California
Texas
Arizona

2 个答案:

答案 0 :(得分:5)

您可以使用zip迭代一对列表:

capitals = tuple(map(str.rstrip, open('capitals.txt')))
states = tuple(map(str.rstrip, open('states.txt')))
answers = ['The capital of {} is {}'.format(state, capital) 
           for state, capital in zip(states, capitals)]

我对您的代码进行了一些简化,并切换到更新的,推荐的格式化字符串的方法。我还将maptuple包装在一起,因为在Python 3 map中返回一个可迭代而不是列表。

答案 1 :(得分:0)

questions = ['What is the capital of the state %s' %(list[x]) for x in range(50)]

试试这个。