Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从列表列表中的目标打印行_Python_Python 3.x_Nested Lists - Fatal编程技术网

Python 从列表列表中的目标打印行

Python 从列表列表中的目标打印行,python,python-3.x,nested-lists,Python,Python 3.x,Nested Lists,第一个块是这个程序中使用的输入文件(只是一个.txt文件)。 在“SearchByTitle”功能中,它可以正确地识别目标是否在列表中,并成功地将其打印出来,但是,它只会打印出实际的目标单词。有没有办法让它把整行打印出来?例如,如果搜索“Sempiternal”,它能否返回Sempiternal,给我带来地平线,Metalcore,14.50,而不仅仅是目标词? 此外,当按价格排序时,它只返回比目标值小的最接近的价格,而不是所有比目标值小的价格 任何朝着正确方向的轻推都会很好,我已经把这件事弄得

第一个块是这个程序中使用的输入文件(只是一个.txt文件)。 在“SearchByTitle”功能中,它可以正确地识别目标是否在列表中,并成功地将其打印出来,但是,它只会打印出实际的目标单词。有没有办法让它把整行打印出来?例如,如果搜索“Sempiternal”,它能否返回Sempiternal,给我带来地平线,Metalcore,14.50,而不仅仅是目标词? 此外,当按价格排序时,它只返回比目标值小的最接近的价格,而不是所有比目标值小的价格

任何朝着正确方向的轻推都会很好,我已经把这件事弄得一团糟好几天了

输入文件:

Sempiternal,Bring Me The Horizon,Metalcore,14.50
Badlands,Halsey,Indie Pop,19.95
Wildlife,La Dispute,Post Hardcore,9.60
Move Along,The All American Rejects,Punk Rock,10.20
职能:

def createDatabase(CD):
    aList = []
    file = open(CD) 
    for line in file:
        line = line.rstrip().split(",")    #strip \n and split at ,
        aList.append(line)      #add lines into formerly empty aList
    for i in range(len(aList)):
        aList[i][3] = float(aList[i][3])    #override line for price to be float
    return aList


def PrintList(aList):
    for line in aList:
        album = str(line[0])   
        artist = str(line[1])
        genre = str(line[2])
        price = str(line[3])
        print("Album: " + album + " Artist: " + artist + " Genre: " + genre + " Price: $" + price)
    return    


def FindByTitle(aList):
    target = input("Enter Title to Search: ")
    title = [item[0] for item in aList]
    for item in title:
        if target in item:
            print("Title name found in database: " + target)
            return aList
        print("Title not found")
        return None


def FindByPrice(aList):
    target = float(input("Enter Maximum Price: "))
    price = [item[3] for item in aList]
    for item in price:
        if item <= target:
            print(item)
            return aList
    print("Artist not found")
    return None
def createDatabase(CD):
aList=[]
文件=打开(CD)
对于文件中的行:
line=line.rstrip().split(“,”)#剥离\n并在,
aList.append(line)#将行添加到以前的空列表中
对于范围内的i(len(aList)):
aList[i][3]=浮动(aList[i][3])#覆盖浮动价格的行
返回列表
def打印列表(列表):
对于列表中的行:
相册=str(第[0]行)
艺术家=str(第[1]行)
类型=str(第[2]行)
价格=str(第[3]行)
打印(“相册:“+相册+”艺术家:“+艺术家+”流派:“+流派+”价格:$”+价格)
返回
def FindBytile(列表):
目标=输入(“输入要搜索的标题:”)
标题=[列表中项目的项目[0]
对于标题中的项目:
如果目标在项目中:
打印(“在数据库中找到的标题名称:”+目标)
返回列表
打印(“未找到标题”)
一无所获
def FindByPrice(列表):
目标=浮动(输入(“输入最高价格:”)
价格=[列表中项目的项目[3]
对于价格中的项目:

如果项目,则应使用熊猫包:

import pandas as pd
df = pd.read_csv(your_input_file)

df[df[0]=='Sempiternal']
pandas的想法是将文件存储在数据帧中,因此对文件的操作比使用循环要容易得多(而且效率更高)。
请记住,数据帧将存储在RAM中,因此请小心处理庞大的输入文件。

您可以尝试以下方法:

def find_by_title(rows):
    query = input('Title: ')
    found = [row for row in rows if row[0] == query]
    return found[0] if found else None
如果这是一张很大的单子,一旦你找到了它,你就想打破它,那么

for row in rows:
    if row[0] == query:
        found = row
        break

您的所有功能都可以在一定程度上进行清理对于函数和变量名,请不要使用
camelCase
,请使用
snake\u case
。前者非常令人不快。

但是,如果搜索不同的标题,这又如何解释呢?我不确定我是否明白你的意思。如果要打印与标题列表相对应的列表行,可以像这样使用isin():df[df[0].isin(音乐列表)]