【问题标题】:Looping over parallel lists in python在python中循环并行列表
【发布时间】:2015-02-26 19:40:59
【问题描述】:

我正在阅读一个 iTunes 库文件。我抓取了艺术家姓名和歌曲并将它们放在平行列表中,一个包含艺术家姓名,另一个包含艺术家歌曲。我想只使用列表来做到这一点

artist_choice = input("Enter artist name: ")
artist_names = [Logic, Kanye West, Lowkey, Logic, Logic]
artist_songs = [Underpressure, Stronger, Soundtrack to the struggle, Ballin, Im the man]

假设用户输入艺术家姓名 Logic,我将如何遍历并行列表并打印出与艺术家 Logic 关联的每首歌曲?如果用户输入逻辑输出应该是:

Underpressure
Ballin
Im the man

【问题讨论】:

  • 我会搜索所有的逻辑索引,然后使用这些索引值来找到你的结果,只需要搜索一个数组,而不是同时搜索。
  • 如果将列表压缩在一起,您可以同时迭代它们。然后你可以使用谓词来设置打印的内容。不过,我会重新组织您存储东西的方式。将信息存储在像(artist_name, [artist's_songs]) 这样的元组中怎么样?然后你可以只存储这些元组的列表,然后进入艺术家的元组以获取他们的歌曲。如果您要添加比歌曲更多的字段,我会创建一个类来存储数据。
  • @richgreen 我如何找到每次出现逻辑的索引位置?我想出了如何只做第一次出现的索引
  • Eww。你是*。我讨厌那个错字-_-

标签: list for-loop python-3.2


【解决方案1】:

这是sudo代码,我其实不太懂python。

results = [];
for (i=0;i<artist_names.length();i++):         1
    if artist_names[i] == artist_choice:
        results.push(artist_songs[i])

但正如@Carcigenicate 所说,有更好的方法来解决这个问题。如果您要在这些列表上进行多次搜索,您可能希望首先循环并将数据分组到哈希表或@Carcigenicate 建议的内容中。

@RPGillespie 的链接解释了如何将它们组合成一个哈希表,这是一种更好的搜索方式。

【讨论】:

    【解决方案2】:

    Rich 打败了我,但我会发布一个更 Python 的例子:

    def getSongs(listOfArtists,listOfSongs,artistToLookup):
        songs = []
        for artist,song in zip(listOfArtists,listOfSongs):
            if (artist == artistToLookup):
                songs.append(song)
        return songs
    

    注意使用zip 可以让您一次相当干净地迭代两个列表(无需下标)。

    【讨论】:

    • 你的答案更好,你的可以被解释 :) 不知道 python
    • 谢谢。我一直讨厌下标,所以我喜欢元组方法。
    猜你喜欢
    • 1970-01-01
    • 2019-04-29
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    相关资源
    最近更新 更多