Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
级联循环输出有更好的Python3方法吗_Python_String_For Loop_Nested Loops_Cascade - Fatal编程技术网

级联循环输出有更好的Python3方法吗

级联循环输出有更好的Python3方法吗,python,string,for-loop,nested-loops,cascade,Python,String,For Loop,Nested Loops,Cascade,现在,我在一个更大的字符串中搜索一个单词,如果找不到该单词,那么我会在更大的字符串中插入该单词。第一个FOR循环的输出级联到第二个FOR循环 这项工作还可以,有一两个,但如果我有100或1000个搜索,每次都这么做会很痛苦,有更好的python 3方法吗 正如您从示例中看到的,我在第一个字符串中查找Monday Monday在那里,所以它跳过了第二个字符串没有Monday,所以它在中添加了Monday。那时我会有一份新的清单。因此,我将第一个循环的输出放入第二个循环的输入,以更新输入 例如: 输

现在,我在一个更大的字符串中搜索一个单词,如果找不到该单词,那么我会在更大的字符串中插入该单词。第一个FOR循环的输出级联到第二个FOR循环

这项工作还可以,有一两个,但如果我有100或1000个搜索,每次都这么做会很痛苦,有更好的python 3方法吗

正如您从示例中看到的,我在第一个字符串中查找Monday Monday在那里,所以它跳过了第二个字符串没有Monday,所以它在中添加了Monday。那时我会有一份新的清单。因此,我将第一个循环的输出放入第二个循环的输入,以更新输入

例如:

输入:-addstring_sign=[周一下雪,周三不下雪]

字符串_test1=[] string_test2=[] dictlines1=星期一

addstring_sign2的输出=[星期一是一个下雪的日子,星期二,星期三没有雪,星期一,星期二]


我不知道如何提高效率。

如果没有其他方法,我认为下面的方法比您目前正在做的要干净得多,可能要快得多。我需要一些时间来设置适当的测试用例,很快就会添加

addstring_sign = ["Monday was a snowing day", "Wednesday no snow"]
dictlines = ['Monday', 'Tuesday']

string_test1 = []
for string in addstring_sign:
    missing_strings = ' '.join([item for item in dictlines if item not in string])
    string_test1.append('{} {}'.format(string, missing_strings))

# Or a list comprehension for the same thing, probably not much faster
string_test2 = ['{} {}'.format(string, 
                ' '.join([item for item in dictlines if item not in string])) 
                for string in addstring_sign]
下一步要做的事情是将dictline转换为一个集合以解决更大的问题。这只需通过以下方式实现:

dictlines = set(dictlines)
这将给你O1查找-这将变得越来越重要,因为听写行的大小增长。我努力使您的现有代码进入一种可以在更大范围内进行测试的方法,但未能成功。但是,您可以看到,即使使用这个小示例,并且没有设置,我的初始方法也比您现有的方法快,这没有什么区别:

%timeit my_for_loop(addstring_sign, dictlines)
1.53 µs ± 4.08 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%timeit your_loop(addstring_sign, dictlines)
2.13 µs ± 8.69 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
TLDR

所以给你一个句子列表,你需要检查每个句子是否包含一个字符串。如果其中一个没有,则需要将字符串附加到句子中

让我们先看看第二行代码,并考虑只有一个词来搜索和追加的情况。此列表将重复您的句子列表,然后:

检查字符串是否在句子中 如果字符串不在句子中,则追加该字符串 在迭代结束时,它重建列表并将其分配回原始列表


第一行代码不是简单地对每个要搜索和附加的单词重复这个过程。

那么,如果该单词不在字符串中,它应该始终被标记到该字符串的末尾?我问是因为我不确定我是否正确理解了索引。是的,没错。。。它被添加到字符串的末尾-因此,如果我们添加星期三,那么新的示例的输出将是-addstring_sign3=[星期一是下雪的一天星期二星期三,星期三没有下雪星期一星期二]我仍然想知道我是否正确理解了您的方法。为什么你们要一个一个地提供电话线?我不知道如何为我的答案设置合适的时间来反对你的方法。我尝试了一个嵌套循环,之前我有一个列表格式,但它会覆盖输出,但如果我一个接一个地输入它并级联输出,它会起作用。我将尝试新的方法,看看它是否适用于我更大的项目。不客气,我只是突然碰壁,想知道是否有一些实际的限制阻止了我发展我的答案。因此,如果您从我这里得到正确的输出,以列表形式提供dictlines,例如dictlines=['Monday','周二],那么没有限制阻止您这样做吗?是的,没错。。。谢谢你的帮助。。。。这是一个列表,对吗?。。。。需要尽快学习这个,它看起来超级强大。是的,这是列表理解。编辑答案以给出更长的解释。
dictlines = set(dictlines)
%timeit my_for_loop(addstring_sign, dictlines)
1.53 µs ± 4.08 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%timeit your_loop(addstring_sign, dictlines)
2.13 µs ± 8.69 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
for word in strings:
    sentences = [line if word in line else line + ' ' + word for line in sentences]