使用 for 循环和列表理解比较列表
Comparing list using for loop and list comprehension
我有一个文本文件,我在其中输入特定的 6 位代码以检查它们是否在主文本文件中。
文本文件如下所示:
'MAIN.txt'
4d5x1x spongebob
2c4b66 bonk
svx123 patrick
'input.txt'
2c4b66
为了查找值 'input.txt' 是否在 'MAIN.txt' 中,我使用了以下代码:
list1 = list()
list2 = list()
with open('input.txt', 'r') as f:
_input = [value[:6] for value in f]
with open('MAIN.txt') as ff:
for line in ff:
# for loop
for x in _input:
if x == line[:6]:
list1.append(x)
# list comprehension
list2 = [k for k in _input if k == line[:6]]
输出:
list1 - ['2c4b66']
list2 - []
_input - ['2c4b66']
为什么列表理解没有捕获任何值?
您可能打算编写此代码:
with open('input.txt', 'r') as f:
_input = [value[:6] for value in f]
list1 = []
list2 = []
with open('MAIN.txt') as ff:
for line in ff:
# for loop
for x in _input:
if str(x) == str(line[:6]):
list1.append(x)
# list comprehension
list2.append([k for k in _input if k == line[:6]])
print(list1)
print(list2)
print(_input)
这里我将list1
和list2
都设置为空列表,并在循环中的适当时间调用.append()
。
输出:
['2c4b66']
[[], ['2c4b66'], []]
['2c4b66']
这显示了 list2
如何捕获 2c4b66
仅匹配 MAIN.txt
的第二行这一事实
问题在于控制结构:每个 line in ff
都有不同的 list2
值,但是全局 list1
。所以 list1
收集所有与输入匹配的行,但是在程序的过程中,list2
是:
[]
['2c4b66']
[]
另一个解决方案:您也可以试试这个:
import numpy as np
main_lines =open("MAIN.txt").read().splitlines()
input_lines =open("input.txt").read().splitlines()
words = [i.split() for i in main_lines ]
main_words = np.concatenate(words)
words = [i.split() for i in input_lines ]
input_words = np.concatenate(words)
found_words = [word for word in input_words if word in main_words]
我有一个文本文件,我在其中输入特定的 6 位代码以检查它们是否在主文本文件中。
文本文件如下所示:
'MAIN.txt'
4d5x1x spongebob
2c4b66 bonk
svx123 patrick
'input.txt'
2c4b66
为了查找值 'input.txt' 是否在 'MAIN.txt' 中,我使用了以下代码:
list1 = list()
list2 = list()
with open('input.txt', 'r') as f:
_input = [value[:6] for value in f]
with open('MAIN.txt') as ff:
for line in ff:
# for loop
for x in _input:
if x == line[:6]:
list1.append(x)
# list comprehension
list2 = [k for k in _input if k == line[:6]]
输出:
list1 - ['2c4b66']
list2 - []
_input - ['2c4b66']
为什么列表理解没有捕获任何值?
您可能打算编写此代码:
with open('input.txt', 'r') as f:
_input = [value[:6] for value in f]
list1 = []
list2 = []
with open('MAIN.txt') as ff:
for line in ff:
# for loop
for x in _input:
if str(x) == str(line[:6]):
list1.append(x)
# list comprehension
list2.append([k for k in _input if k == line[:6]])
print(list1)
print(list2)
print(_input)
这里我将list1
和list2
都设置为空列表,并在循环中的适当时间调用.append()
。
输出:
['2c4b66']
[[], ['2c4b66'], []]
['2c4b66']
这显示了 list2
如何捕获 2c4b66
仅匹配 MAIN.txt
问题在于控制结构:每个 line in ff
都有不同的 list2
值,但是全局 list1
。所以 list1
收集所有与输入匹配的行,但是在程序的过程中,list2
是:
[]
['2c4b66']
[]
另一个解决方案:您也可以试试这个:
import numpy as np
main_lines =open("MAIN.txt").read().splitlines()
input_lines =open("input.txt").read().splitlines()
words = [i.split() for i in main_lines ]
main_words = np.concatenate(words)
words = [i.split() for i in input_lines ]
input_words = np.concatenate(words)
found_words = [word for word in input_words if word in main_words]