Заимствование, немного улучшающее и упрощающее из этот пост в блоге , выглядит следующим образом: g1]
SELECT DISTINCT (:val) "Search Value", TABLE_NAME "Table", COLUMN_NAME "Column"
FROM cols,
TABLE (XMLSEQUENCE (DBMS_XMLGEN.GETXMLTYPE(
'SELECT "' || COLUMN_NAME || '" FROM "' || TABLE_NAME || '" WHERE UPPER("'
|| COLUMN_NAME || '") LIKE UPPER(''%' || :val || '%'')' ).EXTRACT ('ROWSET/ROW/*')))
ORDER BY "Table";
Привет, это мое предложение (очень простое)
import random
i = [1,4,10,22,44,6,12] #first random list, could be change in the future
j = [1,4,10,8,15,14] #second random list, could be change in the future
for x in i:
if x in j: #for any item 'x' from collection 'i', find the same item in collection of 'j'
print(x) # print out the results
Вы также можете использовать наборы и получить общие черты в одной строке: вычесть набор, содержащий отличия от одного из наборов.
A = [1,2,3,4]
B = [2,4,7,8]
commonalities = set(A) - (set(A) - set(B))
Решения, предложенные S.Mark и SilentGhost , как правило, говорят вам, как это должно быть сделано на питоническом пути, но я думал, что вам также может быть полезно узнать, почему ваш решение не работает. Проблема в том, что как только вы найдете первый общий элемент в двух списках, вы возвращаете только этот единственный элемент. Ваше решение можно было бы устранить, создав список result
и собирая общие элементы в этом списке:
def common_elements(list1, list2):
result = []
for element in list1:
if element in list2:
result.append(element)
return result
Еще более короткая версия с использованием списков:
def common_elements(list1, list2):
return [element for element in list1 if element in list2]
, как я уже сказал, это очень неэффективный способ сделать это. Встроенные типы набора Python являются более эффективными, поскольку они реализованы внутри C.
В предыдущих ответах все работают, чтобы найти уникальные общие элементы, но не будут учитывать повторяющиеся элементы в списках. Если вы хотите, чтобы общие элементы отображались с тем же номером, что и их общий список в списках, вы можете использовать следующий однострочный:
l2, common = l2[:], [ e for e in l1 if e in l2 and (l2.pop(l2.index(e)) or True)]
Часть or True
необходима только в том случае, если вы ожидаете, что какие-либо элементы будут оцениваться с помощью False
.
set
, который не является стабильным (иначе он потерян).
– lifebalance
15 June 2017 в 14:14
1) Метод 1 save1 - словарь, а затем итерация каждого элемента в списке2
def findarrayhash(a,b):
h1={k:1 for k in a}
for val in b:
if val in h1:
print("common found",val)
del h1[val]
else:
print("different found",val)
for key in h1.iterkeys():
print ("different found",key)
Поиск общих и разных элементов:
2) Метод2 с использованием set
def findarrayset(a,b):
common = set(a)&set(b)
diff=set(a)^set(b)
print list(common)
print list(diff)
a_list = range(1,10)
b_list = range(5, 25)
both = []
for i in b_list:
for j in a_list:
if i == j:
both.append(i)
[i for i in x if i in y]
.
– maf88_
14 May 2018 в 21:20
вы можете использовать простое понимание списка:
x=[1,2,3,4]
y=[3,4,5]
common = [i for i in x if i in y]
common: [3,4]
Вот довольно грубый метод, который я придумал. Это, конечно, не самый эффективный, но это что-то.
Проблема, которую я нашел с некоторыми из решений здесь, состоит в том, что либо она не дает повторяющихся элементов, либо не дает правильного количества элементов, когда имеет значение порядок ввода.
#finds common elements
def common(list1, list2):
result = []
intersect = list(set(list1).intersection(list2))
#using the intersection, find the min
count1 = 0
count2 = 0
for i in intersect:
for j in list1:
if i == j:
count1 += 1
for k in list2:
if i == k:
count2 += 1
minCount = min(count2,count1)
count1 = 0
count2 = 0
#append common factor that many times
for j in range(minCount):
result.append(i)
return result
>>> list1 = [1,2,3,4,5,6]
>>> list2 = [3, 5, 7, 9]
>>> list(set(list1).intersection(list2))
[3, 5]
использовать множество пересечений, set (list1) & amp; set (list2)
>>> def common_elements(list1, list2):
... return list(set(list1) & set(list2))
...
>>>
>>> common_elements([1,2,3,4,5,6], [3,5,7,9])
[3, 5]
>>>
>>> common_elements(['this','this','n','that'],['this','not','that','that'])
['this', 'that']
>>>
>>>
Обратите внимание, что список результатов может отличаться от исходного списка.