Python3-查找在当前按字母顺序排列的文档中插入字符串的位置
因此,我现在有一个文档,其中有多个不同的项目,它们之间用逗号分隔 文档中每行的第一个单词都按字母顺序排列,因此每行都按字母顺序排列。我需要创建一个函数来查找要插入新字符串的索引,并保持字母列表的完整性。换句话说,插入它,使其仍按字母顺序排列 我使用下面的for循环在逗号处拆分每一行Python3-查找在当前按字母顺序排列的文档中插入字符串的位置,python,list,csv,python-3.x,indexing,Python,List,Csv,Python 3.x,Indexing,因此,我现在有一个文档,其中有多个不同的项目,它们之间用逗号分隔 文档中每行的第一个单词都按字母顺序排列,因此每行都按字母顺序排列。我需要创建一个函数来查找要插入新字符串的索引,并保持字母列表的完整性。换句话说,插入它,使其仍按字母顺序排列 我使用下面的for循环在逗号处拆分每一行 infile = open("Brain.csv", "r") for line in infile: line.split(",") 我怎么能从这里开始呢?按字母顺序排列的单词当然在索引[0]中。Tsk
infile = open("Brain.csv", "r")
for line in infile:
line.split(",")
我怎么能从这里开始呢?按字母顺序排列的单词当然在索引[0]中。Tsk-Tsk..您开始编写一些代码。继续前进!没有必要让人们在互联网上解决你的问题。你能做到 以下是一些有用的提示:
first_words = [f.split(",")[0] for line in infile]
sorted_first_words = sorted(first_words, key=str.lower)
sorted\u first\u words.index(“”)
假设您有这样一个文件:
Michael, Monroe, Stephen
Shawn, Shila, Zed
假设您希望在第二行中插入名称“Ted”,同时保留字母顺序。您只需打开文件,拆分单词,在列表中插入单词,对列表进行排序,然后将值追加到一起:
with open("Brain.csv", "r") as file:
text = file.readlines()
text = [x.split(', ') for x in text]
text[1].append("Ted")
text[1].sort()
text = [", ".join(i) for i in text]
with open("Brain.csv", "w") as file:
file.writelines(text)
现在,当您打开该文件时,您将看到:
Michael, Monroe, Stephen
Shawn, Shila, Ted, Zed
该模块提供和,可以轻松地读取和写入csv文件。也就是说,您可以将项目添加到列表中,并使用函数对其进行排序
form bisect import insort
import csv
with open('brain.csv') as f, \
open('brain_rewrite.csv', 'w') as out:
f_csv = csv.reader(f)
out_csv = csv.writer(out)
for row in f_csv:
g = sorted(i.strip() for i in row)
insort(g, 'Foo') #here inserting word 'Foo' note that word case matter.
out.writerow(g)
你可以把字母想象成数字。比如A=1,B=2,C=3等等,所以你可以检查A是否大于T,以保持字母顺序。希望有帮助 这就是对分。左对分的作用: 演示: 在a中找到x的插入点以保持排序顺序 不适用于您可以执行的文件:
>>> import bisect
>>> import csv
>>> def index_finder(file_name,st)
... with open("file_name", "rb") as csvfile:
... spamreader = csv.reader(csvfile, delimiter=',')
... for row in spamreader:
yield bisect.bisect_left(row,st)
print list(index_finder("Brain.csv",sample_string))
然后,结果将是一个生成器,其中包含可以插入示例字符串的每行中的所有位置
要获取所有索引,您可以执行以下操作:
>>> import bisect
>>> import csv
>>> def index_finder(file_name,st)
... with open("file_name", "rb") as csvfile:
... spamreader = csv.reader(csvfile, delimiter=',')
... for row in spamreader:
yield bisect.bisect_left(row,st)
print list(index_finder("Brain.csv",sample_string))
等等,我很困惑。您是否有未排序行的排序列表?e、 g.
[[alpha]、[zulu]、[epsilon]、[beta]、[kappa]、[kappa]、[beta']
或者它是排序行的排序列表?如果是后者,如果插入的单词出现在第一个索引之前,你想怎么办?嘿,首先谢谢你的回复!我想你们每个人都有点困惑?我现在有一个文件,文件的每一行都有名字,信息,信息。它由名称字母化,但我必须执行以下操作:该函数返回一个整数,指示名称列表中的索引,这样,如果在该索引处将给定字符串插入列表,列表仍将按字母顺序排列。嘿,首先感谢您的回复!我想你们每个人都有点困惑?我现在有一个文件,文件的每一行都有名字,信息,信息。它由名称字母化,但我必须执行以下操作:该函数返回一个整数,指示名称列表中的索引,这样,如果在该索引处将给定字符串插入列表,列表仍将按字母顺序排列。尝试得很好,但对于此类任务,也不需要使用readlines
不是一个好主意,因为您可以逐个读取行并返回相对索引,如果要插入单词,您需要知道行数,并且可以使用fileinput