SyntaxError при определении массива в python

Если вы хотите иметь ListView в AppCompatActivity, а не ListActivity, вы можете сделать следующее (Изменить ответ Shardul):

public class ListViewDemoActivity extends AppCompatActivity {
    //LIST OF ARRAY STRINGS WHICH WILL SERVE AS LIST ITEMS
    ArrayList<String> listItems=new ArrayList<String>();

    //DEFINING A STRING ADAPTER WHICH WILL HANDLE THE DATA OF THE LISTVIEW
    ArrayAdapter<String> adapter;

    //RECORDING HOW MANY TIMES THE BUTTON HAS BEEN CLICKED
    int clickCounter=0;
    private ListView mListView;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.activity_list_view_demo);

        if (mListView == null) {
            mListView = (ListView) findViewById(R.id.listDemo);
        }

        adapter=new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,
                listItems);
        setListAdapter(adapter);
    }

    //METHOD WHICH WILL HANDLE DYNAMIC INSERTION
    public void addItems(View v) {
        listItems.add("Clicked : "+clickCounter++);
        adapter.notifyDataSetChanged();
    }

    protected ListView getListView() {
        if (mListView == null) {
            mListView = (ListView) findViewById(R.id.listDemo);
        }
        return mListView;
    }

    protected void setListAdapter(ListAdapter adapter) {
        getListView().setAdapter(adapter);
    }

    protected ListAdapter getListAdapter() {
        ListAdapter adapter = getListView().getAdapter();
        if (adapter instanceof HeaderViewListAdapter) {
            return ((HeaderViewListAdapter)adapter).getWrappedAdapter();
        } else {
            return adapter;
        }
    }
}

И в вашем макете вместо использования android:id="@android:id/list" вы может использовать android:id="@+id/listDemo"

Итак, теперь вы можете иметь ListView внутри нормального AppCompatActivity.

-2
задан OrenIshShalom 13 July 2018 в 13:47
поделиться

2 ответа

При отладке кода вы или отладчик используете print для отображения массивов NumPy. Команда print не представляет то, что вам нужно, чтобы определить массив. Он применяет специальные правила отображения для облегчения презентации.

В этом случае вам нужно убедиться, что вы используете , для разделения значений в массиве NumPy:

import numpy as np

m = np.array([4, 5, 6])
n = np.array([1, 2, 3])
2
ответ дан jpp 17 August 2018 в 13:05
поделиться
  • 1
    Извините, я не понимаю. Является ли m = [[4, 5, 6]] равным [[4 5 6]]? Если я печатаю («m =» + str (m)), я имею результат m = [[4, 5, 6]], а не [[4 5 6]], тогда как в моем коде, который я отлаживаю, когда я используйте распечатку комментария печати («A =» + str (A)) У меня есть результат, как указано выше, без запятой? – Ilse 13 July 2018 в 12:05
  • 2
    Что вы видите с print(np.array([4, 5, 6]))? – jpp 13 July 2018 в 12:06
  • 3
    у меня есть [4 5 6] – Ilse 13 July 2018 в 12:42
  • 4
    @Ilse. Точно так вы продемонстрировали, что способ определения массива на Python отличается от того, что отображается print. Это чисто проблема отображения / презентации. Вы не должны беспокоиться о дисплее (это не то, что вы контролируете). Сосредоточьтесь на правильном синтаксисе, что означает использование запятых. – jpp 13 July 2018 в 12:43

Это проблема синтаксиса и кодирования против представления:

>>> print 1e3
1000.0

Как можно видеть ... это не печатает 1e3. Он печатает 1000.0. Но означает ли это, что 1e3 не равно 1000.0?

>>> print 1e3 == 1000.0
True

№. Он равен. Таким образом, 1e3 и 1000.0 являются семантически одинаковыми, но выглядят по-разному синтаксически.

>>> print "hi"
hi

, но затем:

>>> print hi
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'hi' is not defined

hi и "hi" можно считать семантически идентичными, но синтаксически они означают совершенно разные вещи. В какой печати он печатает «строчную версию» объекта / значения. Это не обязательно печатает его так же, как вы вводите его в код.

>>> class Animal:
...   def __str__(self):
...     return "Cat"
... 
>>> print Animal()
Cat

Это печатает Cat, но мы не можем использовать Cat для создания животного.

Теперь для синтаксиса списков в python требуются запятые. Также ... numpy массивы ARE NOT списки. У них разные типы. Даже если строковое представление WERE одинаково: «5» и 5 имеют одно и то же строковое представление, но:

>>> print "5"
5
>>> print 5
5

Просто потому, что str(a) == str(b) не означает, что a == b и не подразумевает type(a) == type(b).

они даже не одного типа. Одно целое, а другое - строка. Если вы определяете свой собственный тип, вы можете определить строковое представление для своего типа, но это не изменит синтаксис языка.

Что numpy делает что-то вроде этого:

>>> class Array:
...   def __init__(self, xs):
...     self.xs = xs
...   def __str__(self):
...     return "[%s]" % (" ".join(map(str, self.xs)))
... 
>>> arr = Array([1,2,3])
>>> arr
<__main__.Array instance at 0x7f783f257ef0>
>>> print arr
[1 2 3]

Он просто определяет строковое представление. В противном случае вы не сможете его распечатать:

>>> class Array:
...   def __init__(self, xs):
...     self.xs = xs
... 
>>> arr = Array([1,2,3])
>>> print arr
<__main__.Array instance at 0x7f783f257f38>

Однако мы не можем ожидать, что, когда мы вводим строковое представление чего-то в наш код, это правильный код ... потому что это просто строковое представление something ... это не обязательно действительный код.

0
ответ дан mroman 17 August 2018 в 13:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: